从bash中的stdin获得交互式的多行格式化输入

时间:2019-04-05 15:37:24

标签: bash user-interface stdin

我希望能够以类似于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 :(得分: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