#!/bin/bash --
echo "$$"
LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
echo end of script
Se eu enviar o QUIT
sinal usando Ctrl + \
recebo esta saída:
# ./script.sh
6739
^\./script.sh: line 5: 6740 Quit LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
end of script
Isso mata sed
e causa um dump de núcleo conforme o esperado, mas o script continua. Este é o comportamento esperado? Isso acontece comigo com bash
e ash
mas não não dash
ou ksh93
.
Sim,
bash
ignoraSIGQUIT
. Citando seu manual (ênfase minha):Este é um comportamento fora do padrão, e a maioria dos outros shells não o faz.
Se você não achar isso convincente, dê uma olhada no código-fonte:
shell_initialize()
->initialize_signals(0)
->initialize_shell_signals()
->set_signal_handler (SIGQUIT, SIG_IGN)
é chamado não condicionalmente demain()
.