我正在处理一个bash脚本,它在其中创建一个文本文件,其中包含一些我将用于运行的命令。 在命令之间我想要发送一个echo消息发送到文本文件,如何实现这个?
c=0;
for i in `cat`; do
echo "bash stopservers.sh $i" >> cmds.txt;
echo (echo "please wait, stopping Managed server $i") >> cmds.txt
echo "sleep 10" >>cmds.txt
c=$((c+1));
done < list.txt
由于
答案 0 :(得分:2)
首先,使用while
循环而不是for
循环来确保准确处理每一行。
使用printf
简化了引用; %q
格式确保$line
被正确引用以在命令行中使用。
您可以将整个循环重定向到cmds.txt
,而不是在正文中逐行进行。
c=0
while IFS= read -r line; do
printf 'bash stopservers.sh %q\n' "$line"
printf 'printf %q %q\n' '%s\n' "Please wait, stopping managed server $line"
printf 'sleep 10\n'
c=$((c+1))
done < list.txt >> cmds.txt
答案 1 :(得分:-1)
从bash
或bash
生成sh
代码很难。
如果您要从bash
生成bash
代码,则可以按以下方式使用printf %q
:
while IFS= read -r line; do
printf 'bash stopservers.sh %q\n' "$line"
printf 'printf %q %q\n' '%s\n' "Please wait, stopping managed server $line"
printf 'sleep 10\n'
done <servers_list.txt >cmds.txt
如果您要从bash
生成sh
代码,则可以使用以下代码:
q() {
prefix=''
for p in "$@" ; do
printf "$prefix"\'
printf %s "$p" | sed "s/'/'\\\\''/g"
printf \'
prefix=' '
done
}
while IFS= read -r line; do
printf '%s\n' "$(q bash stopservers.sh "$line" )"
printf '%s\n' "$(q printf '%s\n' "Please wait, stopping managed server $line" )"
printf '%s\n' "$(q sleep 10 )"
done <servers_list.txt >cmds.txt
在某些情况下,$i
可以包含的内容没有限制;该值将被正确转义。
答案 2 :(得分:-3)
将您的echo (echo "please wait, stopping Managed server $i") >> cmds.txt
语句替换为
echo 'echo "please wait, stopping Managed server '$i'"' >> cmds.txt