当文件中有特定字符串时如何重复命令?

当文件中有特定字符串时如何重复命令?

我想在命令的输出中有特定字符串时重复该命令,这表明存在错误。命令是我想要做的是在中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; donewhile-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)。

相关内容