Skip to content

Instantly share code, notes, and snippets.

@atkvishnu
Last active April 5, 2022 09:16
Show Gist options
  • Save atkvishnu/7b24300df8261ba16dfeaf3151317a57 to your computer and use it in GitHub Desktop.
Save atkvishnu/7b24300df8261ba16dfeaf3151317a57 to your computer and use it in GitHub Desktop.
UNIX watch command

watch command in Linux

watch runs command repeatedly, displaying its output (the first screenfull). This allows you to watch the program output change over time. By default, the program is run every 2 seconds; use -n or --interval to specify a different interval.

Function: Execute a program periodically, showing output fullscreen
Syntax: watch [options] command
Syntax: watch [-bdehpvtx] [-n seconds] [--beep] [--color] [--differences[=cumulative]] [--errexit] [--exec] [--help] [--interval=seconds] [--no-title] [--precise] [--version] command

Description

watch runs command repeatedly, displaying its output (the first screenfull). This allows you to watch the program output change over time. By default, the program is run every 2 seconds; use -n or --interval to specify a different interval.

The -d or --differences flag will highlight the differences between successive updates. The --cumulative option makes highlighting "sticky", presenting a running display of all positions that have ever changed. The -t or --no-title option turns off the header showing the interval, command, and current time at the top of the display, as well as the following blank line.

watch will run until interrupted.

Note

Note that command is given to "sh -c" which means that you may need to use extra quoting to get the desired effect.

Note that POSIX option processing is used (i.e., option processing stops at the first non-option argument). This means that flags after command don't get interpreted by watch itself.

Examples

  • To watch for mail, you might do

watch -n 60 from

  • To watch the contents of a directory change, you could use

watch -d ls -l

  • If you're only interested in files owned by user joe, you might use

watch -d 'ls -l | fgrep joe'

  • To see the effects of quoting, try these out

watch echo $$ watch echo '$$' watch echo "'"'$$'"'"

  • To see the effect of precision time keeping, try adding -p to

watch -n 10 sleep 1

  • You can watch for your administrator to install the latest kernel with

watch uname -r

(Note that -p isn't guaranteed to work across reboots, especially in the face of ntpdate (if present) or other bootup time-changing mechanisms)

OPTIONS

   -d, --differences[=permanent]
          Highlight the differences between successive updates. If
          the optional permanent argument is specified then watch
          will show all changes since the first iteration.

   -n, --interval seconds
          Specify update interval.  The command will not allow
          quicker than 0.1 second interval, in which the smaller
          values are converted. Both '.' and ',' work for any
          locales. The WATCH_INTERVAL environment can be used to
          persistently set a non-default interval (following the
          same rules and formatting).

   -p, --precise
          Make watch attempt to run command every --interval
          seconds.  Try it with ntptime (if present) and notice how
          the fractional seconds stays (nearly) the same, as opposed
          to normal mode where they continuously increase.

   -t, --no-title
          Turn off the header showing the interval, command, and
          current time at the top of the display, as well as the
          following blank line.

   -b, --beep
          Beep if command has a non-zero exit.

   -e, --errexit
          Freeze updates on command error, and exit after a key
          press.

   -g, --chgexit
          Exit when the output of command changes.

   -c, --color
          Interpret ANSI color and style sequences.

   -x, --exec
          Pass command to exec(2) instead of sh -c which reduces the
          need to use extra quoting to get the desired effect.

   -w, --no-linewrap
          Turn off line wrapping. Long lines will be truncated
          instead of wrapped to the next line.

   -h, --help
          Display help text and exit.

   -v, --version
          Display version information and exit.

EXIT STATUS

          0      Success.
          1      Various failures.
          2      Forking the process to watch failed.
          3      Replacing child process stdout with write side pipe
                 failed.
          4      Command execution failed.
          5      Closing child process write pipe failed.
          7      IPC pipe creation failed.
          8      Getting child process return value with waitpid(2)
                 failed, or command exited up on error.
          other  The watch will propagate command exit status as
                 child exit status.

ENVIRONMENT

The behaviour of watch is affected by the following environment variables.

WATCH_INTERVAL Update interval, follows the same rules as the --interval command line option.

NOTES

POSIX option processing is used (i.e., option processing stops at the first non-option argument). This means that flags after command don't get interpreted by watch itself.

Bugs

Upon terminal resize, the screen will not be correctly repainted until the next scheduled update. All --differences highlighting is lost on that update as well.

Non-printing characters are stripped from program output. Use "cat -v" as part of the command pipeline if you want to see them.

Authors

The original watch was written by Tony Rems rembo@unisoft.com in 1991, with mods and corrections by Francois Pinard. It was reworked and new features added by Mike Coleman mkc@acm.org in 1999.

ADDITIONS:

https://www.youtube.com/watch?v=kIoZDUd5DKw CppCon 2019: Matt Godbolt: Behind compiler explorer.

watch command was used in compiler explorer!

UNIX script for generating assembley from c++ code!

watch "g++ /tmp/test.cc -std=c++0x -02 -c -S -o - -masm=intel \
       c++filt \
       grep -vE '\s+\.'"

Run with TMUX. Code on one pane and result on another! Whenever the code is changed assemley code is auto generated. (Here, every 2 seconds). We get a interactive shell!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment