#!/bin/bash --
echo "$$"
LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
echo end of script
如果我QUIT
使用发送信号,则会Ctrl + \
得到以下输出:
# ./script.sh
6739
^\./script.sh: line 5: 6740 Quit LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
end of script
这会按预期杀死sed
并导致核心转储,但脚本会继续。这是预期的行为吗?这发生在我身上bash
andash
但不是dash
or ksh93
。
是的,
bash
忽略SIGQUIT
. 引用其手册(强调我的):这是非标准行为,大多数其他 shell 不这样做。
如果你不觉得有说服力,你可以看看它的源代码:
shell_initialize()
->initialize_signals(0)
->initialize_shell_signals()
->set_signal_handler (SIGQUIT, SIG_IGN)
is non-conditionally called frommain()
。