Есть ли способ использовать inputbox и вводить несколько строк?

Вопрос или проблема

Я хочу иметь простой способ вводить сообщения для сотрудников, чтобы они видели их при входе в систему. Это не обязательно должно быть связано с датой, хотя это было бы хорошо, но я не могу найти способ использовать диалог, чтобы позволить мне вводить несколько строк текста, прежде чем я их сохраню в файл.

Немного помощи?

#!/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 могут справиться с задачей достаточно хорошо. Выбирайте тот метод, который наилучшим образом соответствует потребностям вашей организации.

Оцените материал
Добавить комментарий

Капча загружается...