#bash #user-interface #stdin
#удар #пользовательский интерфейс #стандартный код #bash #stdin
Вопрос:
Я хочу иметь возможность интерактивно получать выходные данные с терминала способом, аналогичным hereDOC. Т.е. я хочу, чтобы пользователь мог вводить несколько строк, а затем передавать эту информацию в файл со всем сохраненным форматированием. Что-то вроде этого.
echo "Type your message below. To finish the letter type DONE by itself on a line"
file=mktmp
cat << DONE > $file
очевидно, что это не работает, потому что EOF найден до ЗАВЕРШЕНИЯ. Я думал о передаче пользователя чему-то вроде VIM, но моим менее разбирающимся в компьютерах коллегам сложно работать с vim / emacs / nano.
Комментарии:
1. Используйте
$EDITOR
, и ваши коллеги смогут настроитьEDITOR=their-editor-of-choice
.2. Чтение непосредственно из стандартного ввода будет гораздо менее удобным для пользователя, чем в любом редакторе.
Ответ №1:
Вам нужно использовать редактор; стандартный ввод — это просто поток байтов, а не редактор. Однако вам не нужно жестко кодировать конкретный редактор. EDITOR
это стандартная переменная среды, предназначенная для того, чтобы вызывающий ваш скрипт мог выбирать, какой редактор использовать.
: ${EDITOR:?Please set the environment variable EDITOR to the editor of your choice}
echo "Type your message below, then save and exit your editor."
"$EDITOR" "$file"
EDITOR
обычно устанавливается пользователем в файле конфигурации оболочки, но может быть установлен по требованию при запуске скрипта.
$ EDITOR=nano yourScript.sh
Ответ №2:
хорошо, итак, я придумал это, но, пожалуйста, помогите мне найти что-то лучшее или усовершенствовать это.
echo "Type your message below, to finish the letter press CTL D"
mapfile message
file=`mktemp`
for x in `seq 0 ${#message[@]}`
do printf "${message[$x]}" >> $file
done
cat $file