我想在命令的输出中有特定字符串时重复该命令,这表明存在错误。命令是我想要做的是在中gksu ./installer.run > ./inst.log 2>&1
重复它。如何从 bash 命令行执行此操作?'string'
./inst.log
答案1
在文件中查找字符串:
grep -q string file
退出值告诉您 grep 是否发现任何内容。
然后只要命令返回一个真正的退出值就可以循环:
while command ; do
repeat this
done
虽然您想至少运行该命令一次,所以也许
while true ; do
some command
if ! grep -q string file ; then
break # jump out of the loop if it's _not_ there
fi
done
否则,您需要在循环之前和循环内部重复该命令。
答案2
请注意,在 中while while-cmd-list; do do-cmd-list; done
,while-cmd-list
是还命令列表。它不必是单个命令。
所以你可以这样做:
while
gksu ./installer.run > ./inst.log 2>&1
grep -q string inst.log
do
echo >&2 "Trying again, output contained string"
done
虽然在这里,你也可以这样做:
while
gksu ./installer.run 2>&1 |
tee ./inst.log |
grep string > /dev/null
do
echo >&2 "Trying again, output contained string"
done
(请注意,我们没有使用-q
,因为这意味着可能grep
会提前退出,导致安装程序收到 SIGPIPE)。