複数のログファイルがあり、tail -f
ループ内でそのファイルを操作してCtrl-Cを押すと、現在のファイルが終了してtail -f
次のログファイルに移動しようとします。
for log in *.log; do
printf '%s\n' "Tailing log '$log'; press Ctrl-C to skip to the next"
tail -f "$log"
done
問題は、Ctrl-Cを押すとループ自体が終了することです。tail
この場合、割り込み信号を子プロセスに限定するにはどうすればよいですか?
ベストアンサー1
置く
trap ":" SIGINT
屋根の前に。これにより、シェルはシグナルを無視します。しかし、信号ハンドラの意味で「無視」するのではなく、ダミー命令を実行するという意味でのみ可能です。
シェルプロセスはカーネルの観点から信号をブロックしないため、tail
この例のようにサブプロセスに到達します。