ここでは重要ではない(Python)スクリプトの作業中に、watch
とps aux
を含む非常に奇妙な動作に遭遇しました。
この問題を1行に減らすことができました。実行中
watch "ps aux | grep 'ps aux'"
ターミナルでは、予想どおり、通常数行の出力が得られます。
上の3行は切り取られ、最後にps aux
がほとんど収まらないことに注意してください。端末のサイズをそれ以上収まらないサイズに縮小すると、結果から完全に切り取られます。
つまり、grepはカットオフ出力のみを受け取ります。私がこれについて最も困惑させているのは、これが起こる非常に限られた範囲です。どちらにも起こりません
ps aux | grep "ps aux"
watch "ps u -C ps"
watch "ssh localhost 'ps aux | grep \"ps aux\"'"
これらのすべてのケースで、リストは期待どおりに折り返されます。
これは、Ubuntu 15.04のbashとshの両方に当てはまるようです。
スクリプトでこの問題を回避できましたが、この動作の説明はありますか?
man ps
は次のように述べています(私の強調):
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.
確かに、COLUMNS
変数を手動で設定すると役立ちます。
watch "ps aux | grep 'ps aux'"
COLUMNS=2000 watch "ps aux | grep 'ps aux'"
1Cコンパイラについては話していないのに...