watch cuts off ps aux output when piped
Nasal demons.1
man ps
says (emphasis mine):
comm COMMAND command name (only the executable name).
Modifications to the command name will not be
shown. A process marked is partly
dead, waiting to be fully destroyed by its
parent. The output in this column may contain
spaces. (alias ucmd, ucomm). See also the args
format keyword, the -f option, and the c option.
When specified last, this column will extend to
the edge of the display. If ps can not determine
display width, as when output is redirected
(piped) into a file or another command, the
output width is undefined (it may be 80,
unlimited, determined by the TERM variable, and
so on). The COLUMNS environment variable or
--cols option may be used to exactly determine
the width in this case. The w or -w option may
be also be used to adjust width.
Indeed, setting the COLUMNS
variable manually helps:
watch "ps aux | grep 'ps aux'"
COLUMNS=2000 watch "ps aux | grep 'ps aux'"
1Even though we're not talking about a C compiler...
Related videos on Youtube
![MrLemon](https://i.stack.imgur.com/ndROA.png?s=256&g=1)
MrLemon
Updated on September 18, 2022Comments
-
MrLemon almost 2 years
While working on a (Python) script which is of no consequence here, I have come across a very strange behavior involving
watch
andps aux
, when the latter is piped to something else.I have managed to reduce the issue down to a single line. When running
watch "ps aux | grep 'ps aux'"
in a terminal, you usually get several lines of output, as is expected.
Note that the top three lines are cut off, and just barely fit
ps aux
at the end. When you reduce the size of your terminal to where it does not fit any more, it is cut from the results completely.This means that grep only receives the cut off output. What I find most baffling about this is the extremely limited scope for which this happens. It does not happen for either of
ps aux | grep "ps aux" watch "ps u -C ps" watch "ssh localhost 'ps aux | grep \"ps aux\"'"
In all of these cases, the list wraps around as expected.
This seems to be the case for both bash and sh, on Ubuntu 15.04.
While I managed to work around this issue in my script, does anyone have an explanation for this behavior?
-
terdon almost 9 yearsI can''t reproduce on my machine.
watch "ps aux | grep 'ps aux'"
wraps as expected. There does seem to be an issue withwatch
only showing limited output. You might be interested in my question here: Does watch only monitor the visible output?. -
zwets almost 9 yearsReproducible here, but at a much narrower terminal width than in your screen shot. And lo and behold! then they reappear at a yet narrower width. Nasal demons with a twist.
-
-
zwets almost 9 yearsGood catch! Maybe
watch
itself adds some demons too? The BUGS section in its man page refers to issues with screen repaints.