在处理一个在这里无关紧要的(Python)脚本时,我遇到了一个非常奇怪的行为,涉及watchand ps aux,当后者通过管道传输到其他东西时。
我已经设法将问题减少到一行。跑步时
watch "ps aux | grep 'ps aux'"
Run Code Online (Sandbox Code Playgroud)
在终端中,正如预期的那样,您通常会得到几行输出。
请注意,前三行被切断,ps aux最后几乎不适合。当您将终端的尺寸减小到不再适合的位置时,它会完全从结果中删除。
这意味着 grep 只接收截止输出。我对此感到最困惑的是发生这种情况的范围极其有限。这不会发生在任何一个
ps aux | grep "ps aux"
watch "ps u -C ps"
watch "ssh localhost 'ps aux | grep \"ps aux\"'"
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下,列表都按预期环绕。
在 Ubuntu 15.04 上,bash 和 sh 似乎都是这种情况。
虽然我设法在我的脚本中解决了这个问题,但有人对这种行为有任何解释吗?