我希望能够以类似于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却很难。
答案 0 :(得分:0)
您需要使用编辑器;标准输入只是字节流,而不是编辑器。但是,您不必对特定的编辑器进行硬编码。 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
通常由用户在其shell配置文件中设置,但是可以在运行脚本时按需设置。
$ EDITOR=nano yourScript.sh
答案 1 :(得分:0)
okay, so I came up with this, but please help me find something better or improve on it.
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