我一直在谷歌上搜索这个问题,但一无所获。我在工作中自动化构建过程,我所做的就是获取版本号和构建的简短描述,这些描述可能是多行的。运行该系统的系统是 OSX 10.6.8。
我已经见识过从使用 CAT 到根据需要处理每一行的所有内容。我不知道应该使用什么以及为什么。
尝试
read -d '' versionNotes
如果用户必须使用退格键,则会导致输入乱码。此外,没有好的方法来终止输入,因为 ^D 不会终止,而 ^C 只会退出进程。
read -d 'END' versionNotes
有效...但如果需要退格键,输入仍然会混乱。
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
没有正确结束输入(因为我来不及查找与空字符串匹配的内容)。
答案1
man bash
提到«…
命令替换 $(cat file) 可以被等效但更快的 $(< file) 取代。
…”
$ myVar=$(</dev/stdin)
hello
this is test
$ echo $myVar
hello this is test
$ echo "$myVar"
hello
this is test
我同意这是值得一提的——echo "$myVar"
将会显示给出的输入。
答案2
尝试这个:
user@host:~$ read -d '' x <<EOF
> mic
> check
> one
> two
> EOF
没有换行符:
user@host:~$ echo $x
mic check one two
和换行符:
user@host:~$ echo "$x"
mic
check
one
two
答案3
答案4
我通过处理每一行直到出现空白行来解决这个问题。对于我的情况来说,这种方法已经足够好了。但如果有人想添加更好的解决方案,请随意添加。
echo "---
notes: |" > 'version.yml'
while read line
do
# break if the line is empty
[ -z "$line" ] && break
echo " $line" >> "source/application.yml"
done