Ya; Anda dapat menggunakan return
bukannya exit
. Tujuan utamanya adalah untuk kembali dari fungsi shell, tetapi jika Anda menggunakannya dalam source
-d skrip, ia kembali dari skrip itu.
Sebagai §4.1 "Bourne Shell Builtins" dari Panduan Referensi Bash menempatkannya:
return [n]
Menyebabkan fungsi shell keluar dengan nilai kembalian n .Jika n tidak diberikan, nilai yang dikembalikan adalah status keluar dari perintah terakhir yang dijalankan dalam fungsi. Ini juga dapat digunakan untuk menghentikan eksekusi skrip yang dijalankan dengan
.
(atausource
) bawaan, mengembalikan n ataustatus keluar dari perintah terakhir yang dijalankan dalam skrip sebagai status keluar dari skrip. Perintah apa pun yang terkait denganRETURN
trap dijalankan sebelum eksekusi dilanjutkan setelah fungsi atau skrip. Status pengembalian bukan nol jikareturn
digunakan di luar fungsi dan bukan selama eksekusi skrip oleh.
atausource
.
Alih-alih menjalankan skrip menggunakan . run2.sh
, Anda dapat menjalankannya menggunakan sh run2.sh
atau bash run2.sh
Sub-kulit baru akan dimulai, untuk menjalankan skrip, sub-kulit itu akan ditutup di akhir skrip dan membiarkan cangkang lainnya terbuka.
"Masalah" sebenarnya adalah Anda mencari sumber dan tidak menjalankan skrip. Saat Anda mencari file, kontennya akan dieksekusi di shell saat ini, alih-alih memunculkan subkulit. Jadi semuanya, termasuk exit, akan memengaruhi shell saat ini.
Alih-alih menggunakan exit
, Anda ingin menggunakan return
.
Anda dapat menambahkan perintah keluar tambahan setelah pernyataan/perintah pengembalian sehingga berfungsi untuk keduanya, menjalankan skrip dari baris perintah dan sumber dari terminal.
Contoh kode keluar dalam skrip:
if [ $# -lt 2 ]; then
echo "Needs at least two arguments"
return 1 2>/dev/null
exit 1
fi
Baris dengan exit
perintah tidak akan dipanggil saat Anda mencari skrip setelah return
perintah.
Saat Anda menjalankan skrip, return
perintah memberikan kesalahan. Jadi, kami menyembunyikan pesan kesalahan dengan meneruskannya ke /dev/null
.