tmux で「ps aux | grep blah」の出力を監視しても機能しないのでしょうか?

tmux で「ps aux | grep blah」の出力を監視しても機能しないのでしょうか?

watch "ps aux | grep myShittyProcess"これをtmux セッションで実行しようとしています 。このプロセスmyShittyProcessも tmux セッションで開始されました。watchps auxコマンドなしで動作します。しかし、watch に入れるとすぐに実行に失敗します。これを動作させるにはどうすればよいですか?

- 編集 -

pstmux をフルスクリーンにサイズ変更すると動作することがわかりました。出力のラッピングに関係するもので、grepラッピングされたコンテキスト内で見つけることができません。

答え1

質問の編集で述べたように、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コマンド ライン引数だけでなくプロセス名も検索できるようになります。

答え2

走る

watch "COLUMNS= ps aux | grep TheProcessYouWatch"

説明: は、watch特定の追加の env 変数、つまりCOLUMNSと を設定します。これは、 と をLINES比較することで簡単に確認できます。env | grep COLUMNSwatch 'env | grep COLUMNS'

が設定されている場合COLUMNSps出力がgrep(または他の何か) にパイプされている場合でも、出力は 1 行にその文字数で切り捨てられます。 ( ps、なぜ私にこんなことをするのですか?)。のコマンドCOLUMNS内を空に強制するだけで、は OP (および私) が期待したとおりに動作します。watchps

ちなみに、プロセスが監視対象出力の一部にならないようにするには、次のように追加することを検討してwatchください。grep[]

watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"

(もちろん、慣れておくことpgrepもお勧めします。他の回答もこれに役立ちます。)

答え3

psは人間が読める出力を生成するユーティリティであり、人間が読めるテキストを grep で検索するのは得策ではありません。pgrep myShittyProcessの代わりにを使用する必要がありますps aux | grep myShittyProcess。はpgreppid の単純なリストを生成します。より退屈でない出力が欲しければ、pgrepの出力を に渡すことができますps:

ps -opid,user,args -p `pgrep myShittyProcess`

このワンライナーを使用する場合は、早期のシェルコマンド置換を防ぐために(not )watchで囲む必要があります。' '" "

watch 'ps -opid,user,args -p `pgrep myShittyProcess`'

関連情報