我一直在使用这个问题无济于事。 我正在工作中自动化一个构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