我有一堆日志文件,我想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
?
放
在循环之前。这使得 shell 忽略该信号。但只是在它执行一个虚拟命令的意义上,而不是在信号处理程序意义上的“忽略”。
因为 shell 进程不会阻塞这个信号(从内核的角度来看),所以它会通过它的子进程(就像
tail
在这个例子中一样)。