このスクリプトを取る
#!/bin/sh
fd ()
{
echo Hello world
exit
}
trap fd EXIT INT
for g in {1..5}
do
echo foo
sleep 1
done
fd
Control-C から、またはスクリプトが正常に終了した場合に、一度起動したいと思います。ただし、Control-C を押すと、2 回実行されます。どうすればこれを修正できますか?
このスクリプトを取る
#!/bin/sh
fd ()
{
echo Hello world
exit
}
trap fd EXIT INT
for g in {1..5}
do
echo foo
sleep 1
done
fd
Control-C から、またはスクリプトが正常に終了した場合に、一度起動したいと思います。ただし、Control-C を押すと、2 回実行されます。どうすればこれを修正できますか?
カスケード トラップを実行します。exit 127
トラップを実行しEXIT
、終了コードを 127 に設定します。
#!/bin/sh
fd () {
echo Hello world
# No explicit exit here!
}
trap fd EXIT
trap 'exit 127' INT
あなたの問題に対するさまざまな回避策に数年間苦労した後、他の人のスクリプトからこれを学んだことを覚えています。その後、いくつかのチュートリアルでこの手法が説明されていることに気付きました。しかし、Bash のマニュアル ページ IMHO などでは明確に文書化されていません。(または、必要なときにそうではありませんでした。15年経っても変わらないものもあるかもしれません... :-)
トラップのデフォルトを再定義する場合はどうですか?
#!/bin/sh
fd () {
echo Hello world
trap - EXIT
exit 127
}
trap fd INT EXIT
pstのコメントに触発されました
fd ()
{
echo Hello world
trap - EXIT INT
exit
}