I recently learned about watch, but am having trouble making it work with relatively sophisticated commands.
For example, I would like to ask watch
to run the following command on zsh
every three seconds*:
for x in `command_1 | grep keyword | cut -d' ' -f1`; do command_2 "word[word=number]" $x; done
as you can see the line above includes single quotes, double quotes, among other special characters.
So I tried:
watch -n 3 "for x in `my_command | grep keyword | cut -d' ' -f1`; do command2 "rusage[mem=7000]" $x; done"
but then I got:
no matches found for x in !@#$# ....; done
I tried other combinations without success. Here's one of those attempts:
watch -n 3 "for x in $(bjobs -w | grep pre_seg | cut -d' ' -f1); do bmod -R "rusage[mem=7000]" $x; done"
which also results in a similar error.
Any ideas how to make this work?
*I would also be intersted in solutions that work on bash
watch
does not come with the-x
nor-c
options on my machine. I looked it up online and haven't found any man pages that mention them. What do these options do? – Amelio Vazquez-Reina Oct 26 '11 at 21:45-x
tellswatch
not to pass the command through a shell. I just found out that this is specific to Debian/Ubuntu, even though it's not indicated as such. The-c
is passed tozsh
, not towatch
. – Gilles 'SO- stop being evil' Oct 26 '11 at 22:03-x
and-exec
options both exist in mywatch
(on gentoo), so this is definitely not Debian-specific. Maybe you compared with some other version ofwatch
? Mine comes from procps package. – rozcietrzewiacz Oct 27 '11 at 06:46watch
comes fromprocps
on Debian too. The official source doesn't have--exec
. The package in Debian (and derivatives including Ubuntu) adds the option in a Debian-specific patch (watch_exec_beep.patch
; it's “Mortys watch exec patch” from bug #410967). Gentoo may have adopted a similar patch. – Gilles 'SO- stop being evil' Oct 27 '11 at 07:42'\''
. Think of these four characters as the way to quote a single quote inside single quotes, though technically speaking this is constructed as end the single-quoted string, append a literal single quote, and start a new single-quoted string (still appended to the current word)." – Gabriel Staples Sep 02 '21 at 23:26