Eu tenho um monte de arquivos de log e quero fazer tail -f
um loop neles de forma que, quando eu pressionar Ctrl-C, a corrente tail -f
seja eliminada e eu prossiga para o próximo arquivo de log:
for log in *.log; do
printf '%s\n' "Tailing log '$log'; press Ctrl-C to skip to the next"
tail -f "$log"
done
O problema é que pressionar Ctrl-C mata o próprio loop. Como posso restringir o sinal de interrupção apenas ao processo filho, tail
neste caso?
Colocar
antes do laço. Isso faz com que o shell ignore o sinal. Mas apenas no sentido de que ele executa um comando fictício, não "ignora" no sentido do manipulador de sinal.
Como o processo shell não bloqueia esse sinal (da perspectiva do kernel), ele passa para seus processos filhos (como
tail
neste exemplo).