在 tmux 中观看“ps aux | grep blah”的输出不起作用?

Shr*_*ath 8 linux grep ps tmux

我正在尝试watch "ps aux | grep myShittyProcess"在 tmux 会话中运行它 。这个过程myShittyProcess也是在 tmux 会话中启动的。在ps aux没有钟表命令工作。但是一旦我将它放入监视中,它就无法执行。如何让这个工作?

- 编辑 -

发现将 tmux 调整为全屏使其工作。与ps输出包装有关,grep无法在包装的上下文中找到。

Pio*_*sen 9

跑步

watch "COLUMNS= ps aux | grep TheProcessYouWatch"
Run Code Online (Sandbox Code Playgroud)

说明:watch设置某些附加环境变量,即COLUMNSLINESenv | grep COLUMNS通过比较和可以很容易地验证这一点watch 'env | grep COLUMNS'

COLUMNS设置后,即使输出通过管道传输(或其他任何内容)ps,也会将其输出截断为一行中的多个字符。grepps, 你为什么要这样对我?)。强制在 的命令COLUMNS中为空watch足以使ps工作按OP(和我)的预期进行。

顺便说一句,为了避免watchgrep处理成为您监视的输出的一部分,请考虑[]像这样添加:

watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
Run Code Online (Sandbox Code Playgroud)

(当然,我建议也熟悉一下pgrep。其他答案对此会有帮助。)


小智 3

正如问题编辑和xzfc 的回答中提到的,该问题似乎与 tmux 的换行有关。对于更接近 的直接替换的内容ps aux | grep [q]uote,如果您不需要用户信息,请尝试:

$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote

$ watch pgrep -af [q]uote
Run Code Online (Sandbox Code Playgroud)

-a标志使输出包含命令行参数,同时-f允许您搜索命令行参数以及进程名称。