When I run this script, it does not display the watch output on the screen, and does not timeout after 5s.
§ cat script.sh #!/bin/bash timeout 5s watch -n 1 ps This is what I see on the screen when I run the script:
However, running the content of the script directly in the terminal works as expected: i.e.,
§ timeout 5s watch -n 1 ps What exactly is happening under the covers that is preventing watch from showing the content on the screen when invoked from a script?
Furthermore, using the --foreground option of timeout in the script makes it work as expected, but I don't understand why.
If it matters, here are versions of the tools:
§ bash --version bash --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19) Copyright (C) 2007 Free Software Foundation, Inc. § watch -v watch from procps-ng 3.3.12-dirty § timeout --version timeout (GNU coreutils) 8.29 Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Padraig Brady. 