我有一堆日志文件,我想tail -f
在循环中对它们执行 a 操作,这样当我按 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
在循环之前。这使得 shell 忽略该信号。但只是在它执行虚拟命令的意义上,而不是信号处理程序意义上的“忽略”。
因为 shell 进程不会阻止该信号(从内核角度来看),所以它会到达其子进程(如tail
本例所示)。