Apakah menjalankan exec echo "some "; echo "test"
di bash tidak pernah mencetak "beberapa tes"?
Saya akan mencari konfirmasi untuk pertanyaan ini, karena saya sedang menulis skrip shell kecil dan saya ingin agar tidak melanjutkan apa pun setelah exec
perintah telah dipanggil.
Saya pikir saya tidak perlu khawatir, sebagai pemahaman saya, setelah berkonsultasi:
man 3 exec
man 1p exec
Script shell, ketika dijalankan oleh shell akan membuat
- shell menjalankan program
exec
, yang - menggunakan
exec***
panggilan sistem keluarga yang menggantikan shell/bash yang telah menjalankan skrip, dengan penghalang ini tindakan lebih lanjut dari shell (yang "diganti")
Seperti yang dijelaskan sebelumnya, tujuan utama dari pertanyaan ini adalah untuk mencari konfirmasi atas alasan saya untuk mencegah bahwa apa pun dalam skrip terjadi setelah exec (seperti echo test
) akan dieksekusi.
Saya akan menghargai jawaban umum (POSIX), sejauh mungkin, tetapi hanya dalam kasus kekhususan saya paling tertarik pada GNU/Linux dan GNU/Bash
Jawaban yang Diterima:
exec
selalu menyelesaikan skrip jika itu menjalankan perintah dan melakukannya dengan sukses (tidak terkait dengan kode keluar perintah tetapi untuk memulainya).
exec
dapat dijalankan tanpa perintah dengan cara yang sangat berguna:Untuk mengalihkan deskriptor file secara permanen:
exec 3>/path/to/file
Jika perintah tidak dapat dimulai maka perilaku shell tergantung pada konfigurasi. bash
keluar secara default.
Mungkin sebaiknya Anda menggunakan fungsi sebagai gantinya:
safe_exec () {
cmd="$1"
if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
exit 1
else
exec "[email protected]"
fi
}
safe_exec echo "some "; echo "test"