使用“watch”的 Bash 脚本失败。为什么?

使用“watch”的 Bash 脚本失败。为什么?

我需要从终端重复运行(每 3600 秒)以下命令:

if whois abcxyz.com | grep -q 'string'; then
    echo 'Message line 1'
    echo 'Message line 2'
fi

我尝试使用watch,如下所示:

watch -n 3600 if whois abcxyz.com | grep -q 'string'; then
    echo 'Message line 1'
    echo 'Message line 2'
fi

但我收到错误消息。

你能帮助我让它工作吗?

谢谢

答案1

由于默认使用watch [options] command执行,因此您commandsh -c使用它直接运行shell代码片段,前提是:

  1. 你引用得对

  1. 你的代码与 sh 兼容,即不使用任何 bash/zsh/csh-“isms”

例如

$ watch -n 36 'if whois abcxyz.com | grep -q "string"; then
  echo "Message line 1" | ts
  echo "Message line 2" | ts
fi'

答案2

watch记录在 中man watch为:

watch [options] command

它需要一个简单的命令,而不是一个完整的命令表达式,
所以,你必须将你的命令包装在bash脚本中,就是watch这样。

例如,

$HOME/bin/foo

#!/bin/bash
if whois abcxyz.com | grep -q 'string'; then
    echo 'Message line 1'
else
    echo 'Message line 2'
fi

然后,使用以下命令使foo之可执行chmod +x $HOME/bin/foo

watch -n 3600 $HOME/bin/foo

相关内容