は、Control-Cまたはスクリプトが正常に終了した場合のいずれか、私は一度火にfd
をしたいと思い、このスクリプト出口
#!/bin/sh
fd()
{
echo Hello world
exit
}
trap fd EXIT INT
for g in {1..5}
do
echo foo
sleep 1
done
してください。ただし、Control-Cを押すと2回実行されます。これをどうすれば解決できますか?
は、Control-Cまたはスクリプトが正常に終了した場合のいずれか、私は一度火にfd
をしたいと思い、このスクリプト出口
#!/bin/sh
fd()
{
echo Hello world
exit
}
trap fd EXIT INT
for g in {1..5}
do
echo foo
sleep 1
done
してください。ただし、Control-Cを押すと2回実行されます。これをどうすれば解決できますか?
カスケードトラップを実行します。あなたは
#!/bin/sh
fd() {
echo Hello world
# No explicit exit here!
}
trap fd EXIT
trap 'exit 127' INT
は、私が数年前から問題に様々な回避策に苦しんでた後、他の人のスクリプトからこのことを学んで覚えていると言うことができるようにexit 127
は、EXIT
トラップを実行し、127に終了コードを設定します。その後、私はいくつかのチュートリアルでこのテクニックを説明していることに気付きました。しかし、それは明確に文書化されていない。 BashマニュアルページIMHO。 (または、それが必要なときではありませんでした.15年後には変化しないかもしれません...:
#!/bin/sh
fd() {
echo Hello world
trap - EXIT
exit 127
}
trap fd INT EXIT
とてもいいです、+1 :) – drAlberT