走る
watch "COLUMNS= ps aux | grep TheProcessYouWatch"
説明:watch
特定の追加の環境変数、つまり COLUMNS
を設定します そして LINES
.これは env | grep COLUMNS
を比較することで簡単に確認できます と watch 'env | grep COLUMNS'
.
COLUMNS
のとき 設定されています、ps
出力が grep
にパイプされている場合でも、出力を 1 行の文字数に切り捨てます。 (または他のもの)。 (ps
、 なぜあなたは私にこれを行うのですか?)。 COLUMNS
を強制する watch
以内で空になる のコマンドは ps
を作るのに十分です OP (および私) が期待するとおりに動作します。
ところで、 watch
を避けるために と grep
プロセスが監視対象の出力の一部である場合、[]
を追加することを検討してください このように:
watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"
(もちろん、pgrep
に慣れることをお勧めします それも。他の回答がこれに役立ちます。)
質問の編集と 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
-a
フラグは出力にコマンドライン引数を含めますが、 -f
プロセス名だけでなく、コマンド ライン引数も検索できます。
ps
人間が読める出力を生成するユーティリティであり、人間が読めるテキストを grep することに依存するのは悪い考えです。 pgrep myShittyProcess
を使用する必要があります ps aux | grep myShittyProcess
の代わりに . pgrep
pid の裸のリストを生成します。退屈な出力を減らしたい場合は、pgrep
を渡すことができます の ps
への出力 :
ps -opid,user,args -p `pgrep myShittyProcess`
watch
でそのワンライナーを使用するには ' '
で囲む必要があります (" "
ではありません) ) 初期のシェル コマンドの置換を防ぐため:
watch 'ps -opid,user,args -p `pgrep myShittyProcess`'