次のようなスクリプトが必要です。
- トリガー
make 2&>1 | less -R
- フォルダー内のすべての変更をリッスンします (を使用
inotifywait -R
)
フォルダーが変更されると、スクリプトはless
プロセスを強制終了して再起動する必要があります。
これを行う正しい方法についてはわかりません(スクリプトの2つのブランチを並行して実行できるようにし、監視ジョブがジョブのpidを認識できるようless
にします。後者はフォアグラウンドにある必要があるためです)。
次のようなスクリプトが必要です。
make 2&>1 | less -R
inotifywait -R
)フォルダーが変更されると、スクリプトはless
プロセスを強制終了して再起動する必要があります。
これを行う正しい方法についてはわかりません(スクリプトの2つのブランチを並行して実行できるようにし、監視ジョブがジョブのpidを認識できるようless
にします。後者はフォアグラウンドにある必要があるためです)。
何かが変更されるたびに自動再コンパイルをトリガーしたいだけの場合は、次のことを試すことができます。
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
使用量を減らす代わりに、以下のようにテールを試してください。
makeコマンド:
make 2&>1 /output/file
もう一方の端末でのtailコマンド:
tail -f /output/file
これにより、発生したすべての変更のライブストリームが表示されます。