![更改终端大小会影响 watch 命令中 grep 的输出](https://linux22.com/image/1273956/%E6%9B%B4%E6%94%B9%E7%BB%88%E7%AB%AF%E5%A4%A7%E5%B0%8F%E4%BC%9A%E5%BD%B1%E5%93%8D%20watch%20%E5%91%BD%E4%BB%A4%E4%B8%AD%20grep%20%E7%9A%84%E8%BE%93%E5%87%BA.png)
如果我运行如下命令:
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”行。