получение интерактивного многострочного отформатированного ввода из стандартного ввода в bash - PullRequest
0 голосов
/ 05 апреля 2019

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

echo  "Type your message below. To finish the letter type DONE by itself on a line"
file=mktmp
cat << DONE > $file

очевидно, что это не работает, потому что EOF найден до DONE. Я думал о том, чтобы передать пользователю что-то вроде VIM, но моим менее опытным коллегам по компьютерам трудно с vim / emacs / nano.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

хорошо, так что я придумал это, но, пожалуйста, помогите мне найти что-то лучше или улучшить это.

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
0 голосов
/ 05 апреля 2019

Вам нужно использовать редактор;стандартный ввод - это просто поток байтов, а не редактор.Однако вам не нужно жестко программировать определенный редактор.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...