Ubuntu – Bash script using ‘watch’ fails. Why

bashscripts

I need to run repeatedly (every 3600 seconds) the following commands from the terminal:

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

I tried using watch, as follows:

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

but I get error messages.

Could you please help me make it work?

Thanks

Best Answer

Since watch [options] command executes command using sh -c by default, you can use it run snippets of shell code directly provided that:

  1. you get the quoting right

and

  1. your code is sh-compatible i.e. doesn't use any bash/zsh/csh-"isms"

So for example

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