1

そのため、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

誰かがこの動作を説明できますか? 添字の最後がパイプとティーでそのようにスキップされないようにする方法はありますか?

ありがとう

4

1 に答える 1

1

tee オプション "-i" を使用してみてください。

(
#script
) | tee -i -a /tmp/$$.log
于 2012-08-10T09:07:19.407 に答える