0

次のようなスクリプトが必要です。

  • トリガーmake 2&>1 | less -R
  • フォルダー内のすべての変更をリッスンします (を使用inotifywait -R)

フォルダーが変更されると、スクリプトはlessプロセスを強制終了して再起動する必要があります。

これを行う正しい方法についてはわかりません(スクリプトの2つのブランチを並行して実行できるようにし、監視ジョブがジョブのpidを認識できるようlessにします。後者はフォアグラウンドにある必要があるためです)。

4

2 に答える 2

2

何かが変更されるたびに自動再コンパイルをトリガーしたいだけの場合は、次のことを試すことができます。

while inotifywait -qqr /dir/to/watch; do
   make | less
done

このソリューションでは、再コンパイルが発行されるたびにlessコマンドが強制終了されないことを理解しています。

上記のわずかなバリエーションは、完了後に置く量を減らすことです。

while inotifywait -qqr /dir/to/watch; do
   make
done | less

このバージョンでは、(最初​​のmakeが終了した後)すぐに再コンパイルがトリガーされますが、lessからのすべての出力をページングする必要があります(qで終了しないでください)。

これはあなたがいじりたいかもしれないもう一つの変種です。このバージョンでは、コードを変更すると、進行中のmakeが強制終了され、再起動されます。ただし、出力の画面ページングは​​ありません(これをバックグラウンドプロセスと組み合わせるのは困難です)。

BGPID=0
while inotifywait -qqr /dir/to/watch; do
   [ "$BGPID" -gt 1 ] && kill $BGPID
   (make | tail -f)&
   BGPID=$!
done
于 2012-11-01T23:01:44.140 に答える
1

使用量を減らす代わりに、以下のようにテールを試してください。

makeコマンド:

make 2&>1 /output/file

もう一方の端末でのtailコマンド:

tail -f /output/file

これにより、発生したすべての変更のライブストリームが表示されます。

于 2012-11-01T20:02:26.287 に答える