そのため、bash スクリプトの奇妙な動作を特定しました。
テストスクリプトは次のとおりです。
echo "start of script"
(
echo "start of subshell"
cat > /tmp/$$ << EOF
trap 'exit 99' SIGINT
echo "sleep 10, hit ctrl+c now"
sleep 10
EOF
chmod +x /tmp/$$
/tmp/$$
echo "end of subshell"
#)
) | tee -a /tmp/$$.log
echo "end of script"
ご覧のとおり、サブシェルを作成する括弧を使用して、ロギング目的で出力を簡単にパイプします。
このサブシェル内で、ctrl+c シグナルをキャッチしてスクリプトを終了するスクリプトを実行します。
したがって、サブシェルの出力をパイプするかどうかによって、添え字 (sleep 10) 中に ctrl+c を押したときの動作が異なります。
|で tee -a /tmp/$$.logの場合、出力は次のようになります。
[/tmp] ./test.sh
start of script
start of subshell
sleep 10, hit ctrl+c now
end of script
パイプとティーがない場合、出力は次のようになります。
[/tmp] ./test.sh
start of script
start of subshell
sleep 10, hit ctrl+c now
**end of subshell**
end of script
誰かがこの動作を説明できますか? 添字の最後がパイプとティーでそのようにスキップされないようにする方法はありますか?
ありがとう