jobsコマンドをwatchコマンドで監視したい
やりたかったこと
バックグラウンドで実行している処理はjobsコマンドで管理できるが、毎秒(あるいは任意の単位時間)に一回監視するときに毎回コマンドを手入力するのは面倒である。このようなときに役に立つのがwatchコマンドだが、jobsコマンドと併用すると何も出力されないという問題があったのでちょっと調べてみた。
日本語でこれについて書いてある記事は見つからなかったが、参考になる英語の掲示板(How do I use the watch and jobs commands together in Bash?)を見つけた。
結論
できませんでした。
調べてみるとwatchコマンドは、そのあとに続くコマンドを新しいプロセス上で実行しているらしい。jobsコマンドは実行された環境でのジョブを確認するコマンドである。そのため、watchコマンドと併用すると新しいプロセス上でのjobを確認することとなり、結果として(当然)何も出力されない。
代替案
上述の掲示板にもあったが、whileループを自分で書くか、psコマンドとgrepコマンドを併用することで目的を達成できる。
while true; do echo -ne "`jobs`\r"; sleep 1; done #方法1
watch 'ps u | grep [jobの名前]' #方法2
個人的に簡単に確認するだけなら方法2の方が覚えやすいのでお勧め。問題はgrepコマンド自身も表示されてしまうことだがそこまで気にならない。