Вопрос или проблема
Я хочу иметь простой способ вводить сообщения для сотрудников, чтобы они видели их при входе в систему. Это не обязательно должно быть связано с датой, хотя это было бы хорошо, но я не могу найти способ использовать диалог, чтобы позволить мне вводить несколько строк текста, прежде чем я их сохраню в файл.
Немного помощи?
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Запись на доске объявлений" --clear \
--inputbox "Введите сегодняшнюю очень важную\n
информацию для сотрудников ниже:" 16 51 2> $tempfile
retval=$?
case $retval in
0)
echo "Введённая строка: `cat $tempfile`";;
1)
echo "Нажата отмена.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "Нажата клавиша ESC."
fi
;;
esac
Используйте --editbox emptyfile
вместо --inputbox
. К сожалению, это не позволит вам передать /dev/null
вместо emptyfile
, поэтому вам действительно придется создать пустой (временный) файл. Или файл, содержащий шаблон сообщения.
В качестве альтернативы dialog
вы можете просто открыть редактор с временным файлом. Таким образом, каждый пользователь сможет использовать свой любимый $EDITOR
, вместо ограниченного по функциям dialog
. Многие приложения используют такой подход, когда им нужен ввод пользователя. Особо тут на ум приходят системы управления версиями.
простой способ вводить сообщения, чтобы сотрудники видели их при входе в систему
Для отображения файла есть --textbox file height width
вместо --editbox filepath height width
, как было предложено. Также есть --tailbox file height width
и --tailboxbg file height width
.
С целью отображения текста (не в файле, а из переменной или напрямую переданного в кавычках), есть --infobox text height width
или --msgbox text height width
или --yesno text height width
, но не --inputbox text height width [init]
Я прочитал в комментарии, что автор вопроса использовал RHEL5, где некоторые из этих виджетов отсутствуют, но есть альтернативы, как вы можете видеть.
чтобы позволить мне вводить несколько строк текста, прежде чем я их сохраню в файл.
Мне неясно: отображаемые тексты или файлы не ограничены по количеству строк. Если цель состоит в том, чтобы позволить пользователям заполнять доску, я бы рекомендовал использовать $EDITOR
, как было предложено, потому что это удобнее и дружелюбнее для пользователей.
Ответ или решение
Для решения задачи создания многострочного ввода текстовых сообщений для сотрудников при их входе в систему можно использовать утилиту dialog
. Проблема, с которой вы столкнулись, заключается в том, что стандартный элемент интерфейса inputbox
позволяет вводить только одну строку текста. К счастью, существует способ обойти это ограничение.
Решение с использованием --editbox
Для того чтобы предоставить пользователям возможность вводить многострочный текст, рекомендуется заменить --inputbox
на --editbox
. Это позволит вам открывать текстовый редактор, в котором сотрудники смогут ввести свои сообщения. Однако следует иметь в виду, что --editbox
требует наличия файла, который будет использоваться как временное хранилище для введенного текста. Пример реализации:
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=$(mktemp) || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Bulletin Board Entry" --clear \
--editbox "$tempfile" 16 51
retval=$?
case $retval in
0)
echo "Input string is `cat $tempfile`";;
1)
echo "Cancel pressed.";;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo "ESC pressed."
fi
;;
esac
Альтернативное решение с использованием редактора
Есть еще один, более универсальный подход, который можно рассматривать — это запуск текстового редактора (например, nano
, vi
, или другого, установленного по умолчанию у пользователя) с временным файлом. Таким образом, каждый пользователь сможет использовать свой предпочтительный редактор, что значительно повысит удобство работы. Пример кода:
#!/bin/sh
tempfile=$(mktemp) || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
# Открыть редактор
${EDITOR:-nano} $tempfile
# После завершения редактирования вывести содержимое
if [ -s $tempfile ]; then
echo "Input string is `cat $tempfile`"
else
echo "No input provided."
fi
Другие опции dialog
Если необходимо просто показать текст, а не получить его, вы можете использовать:
--textbox
для отображения файла с текстом,--msgbox
для показа сообщения.
Эти элементы могут быть полезны, если вам нужно выводить на экран различные сообщения, например, оповещения для сотрудников.
Заключение
Выбор способа ввода сообщения зависит от предпочтений ваших сотрудников и целей использования. Если вы хотите сделать ввод сообщений наиболее удобным и интуитивно понятным, использование редактора — это, вероятно, лучший вариант. Если требуется лишь краткое уведомление о статусе, то элементы dialog
могут справиться с задачей достаточно хорошо. Выбирайте тот метод, который наилучшим образом соответствует потребностям вашей организации.