如何从STDIN中读取多行到一个variables?

我一直在使用这个问题无济于事。 我正在工作中自动化一个构build过程,而我所要做的就是获取版本号和构build的一个很小的描述,可能是多行的。 运行的系统是OSX 10.6.8。

我已经看到了使用CAT来处理每一行的一切。 我不知道我应该使用什么,为什么。

尝试

read -d '' versionNotes 

如果用户必须使用退格键,则会导致乱码input。 也没有什么好的方法来终止input,因为^ D不会终止,^ C只是退出这个过程。

 read -d 'END' versionNotes 

工作…但仍然input,如果退格键是必要的。

 while read versionNotes do echo " $versionNotes" >> "source/application.yml" done 

没有正确地结束input(因为我太晚,查不到匹配空string)。

man bash提到«…

命令replace$(cat file)可以被replace为等价但更快的$(<file)。

…»

 $ myVar=$(</dev/stdin) hello this is test $ echo $myVar hello this is test $ echo "$myVar" hello this is test 

我同意这是值得一提的 – echo "$myVar"将显示input,因为它给。

请参阅优秀的Bash指南,了解所有bash脚本需求。

特别是Bash常见问题包含在#1号码:

如何逐行读取文件(数据stream,variables)(和/或逐字段)?

尝试这个:

 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 

我已经解决了这个问题,处理每一行,直到我想出了一个空行。 它适用于我的情况。 但如果有人想要添加更好的解决scheme,请随时这样做。

 echo "--- notes: |" > 'version.yml' while read line do # break if the line is empty [ -z "$line" ] && break echo " $line" >> "source/application.yml" done 

你可以启动一个编辑器,如vim,pico …

 ${VISUAL:-${EDITOR:-vi}} source/application.yml 

首先几个更正:

1)为了让“编辑”在线上使用-e使用readline(所以你有bash历史和所有的编辑function)2)-d只需要一个字符。 例如从'结束'需要'E'和每当用户写一个'E'的阅读停止(我想这不是你想要的…)

有几个可能性来做到这一点。 我会逐行阅读,当find空行时停止阅读(尽pipe你可以设置任何停用词):

 unset tmp while : do read line [[ $line == "" ]] && tmp="${tmp:0:$((${#tmp}-1))}" && break tmp="$tmp"$line$'\n' done 

你有几种方法。

最简单的方法之一是:
MYVAR=$(yourcommand)
echo $"MYVAR"

例如:
MYVAR=$(ls /)
echo $"MYVAR"

请参阅: http : //tldp.org/LDP/abs/html/internal.html#READR

使用“读”,并注意,如果你用“\”结束一行,则换行符被忽略。 所以你可以这样做:

 !/斌/庆典

读-p“版本:”版本
 echo $版本

 #input一些input并用“\”结尾长行,然后在末尾inputplain
读-p“description:”描述
 echo -e“$ version \ n $ description >> yourfile.txt