Giriş
trap kullanırken
trap kullanırken
1. önce çalıştırılacak komut
2. sonra yakalanmak istenen sinyal belirtilir.
TERM Signal
Örnek
TERM Signal
Örnek
Bash signal'leri subprocess'lere göndermez. trap ile bunları yakalayıp cleanup yapmak için şöyle yaparız
#!/bin/bash...trap 'kill -TERM $PID' TERM INT$JAVA_EXECUTABLE $JAVA_ARGS &PID=$!wait $PIDtrap - TERM INTwait $PIDEXIT_STATUS=$?...
ERR Signal
Örnek
Herhangi bir komut çalışırken hata verirse bunu yakalamak için şöyle yaparız
trap 'echo "Error: $? occurred" >> log.txt' ERR some_command some_bad_command some_command veya #!/bin/bash trap 'error_handler $? $LINENO' ERR error_handler () { echo "Error: $1 occurred on line $2" } # rest of code...
INT Signal
ÖrnekCtrl + C ile break yaparak döngüyü sonlandırmak için şöyle yaparız.
#!/bin/bash
trap break INT
for (( c=0; c<=$1; c++ ))
do
# SOME STUFF HERE
# data gathering into arrays and other commands here etc
echo loop "$c" before sleep
# sleep potentially for a long time
sleep "$2"
echo loop "$c" after sleep
done
#WRITE REPORT OUT TO SCREEN AND FILE HERE
echo outside
Çıktı olarak şunu alırız.$ ./s 3 1
loop 0 before sleep
loop 0 after sleep
loop 1 before sleep
^Coutside
ÖrnekCtrl + C ile echo+ exit yapmak için şöyle yaparız.
#!/bin/bash
(
trap "echo interrupted.; exit 0" INT
while true; do
echo "running some task..."
some heavy task
echo "running sleep..."
sleep 5;
echo "iteration end."
done
)
echo "script end."
EXIT Signal
ÖrnekBash sonlanırken (EXIT) bir metod çağırmak için şöyle yaparız.
#!/bin/bash
# Create a temporary directory (these will usually be created under /tmp or /var/tmp/)
scripttmp=$(mktemp -d)
cleanup() { # Declare a cleanup function
rm -rf "${scripttmp}" # ... which deletes the temporary directory we just created
}
trap cleanup EXIT # Ask Bash to call cleanup on exit
# When exiting, the temporary directory will be deleted
exit
ÖrnekSadece bazı exit kodları için şöyle yaparız.
trap cleanup 0 1 2 3 6
cleanup()
{
...
}
Hiç yorum yok:
Yorum Gönder