更改终端大小会影响 watch 命令中 grep 的输出

更改终端大小会影响 watch 命令中 grep 的输出

如果我运行如下命令:

watch "ps -ef | grep '^foo.*bar'"

并且匹配的输出行ps -ef是一条长行,例如

foo <lots and lots of text here> bar

此行是否输出受终端大小影响。例如,如果终端是全屏的,并且此行适合屏幕,则输出将显示在 watch 中。但是,如果我将窗口大小调整为屏幕大小的一半,以便栏从屏幕上截断,那么 grep 行将完全消失(可能是该行在到达管道中的 grep 之前被截断)。这是一个问题,因为我试图提取此行的一部分以供稍后在管道中使用。

有什么解决方案可以防止终端大小影响 watch 命令中 grep 的输出?

答案1

它不是grep, 它是附言. 添加-ww选项(ps -efww)来告诉它始终输出整行。

答案2

我不知道正确的解决方案是,但这似乎解决了问题,

watch "COLUMNS=160 ps -ef | grep '^foo.*bar'"

代价是折叠 ps 中的行。将“160”更改为足够长的长度,以便显示您期望看到的最长的“foo.*bar”行。

相关内容