GNU/Linux >> Belajar Linux >  >> Linux

Cara apa pun untuk keluar dari skrip bash, tetapi tidak keluar dari terminal

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 . (atau source ) bawaan, mengembalikan n ataustatus keluar dari perintah terakhir yang dijalankan dalam skrip sebagai status keluar dari skrip. Perintah apa pun yang terkait dengan RETURN trap dijalankan sebelum eksekusi dilanjutkan setelah fungsi atau skrip. Status pengembalian bukan nol jika return digunakan di luar fungsi dan bukan selama eksekusi skrip oleh . atau source .


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 .


Linux
  1. Apa cara terbaik untuk memastikan hanya satu contoh skrip Bash yang berjalan?

  2. Cara mendapatkan status keluar satu lingkaran di bash

  3. Variabel lingkungan TERM tidak disetel

  1. Naikkan kesalahan dalam skrip Bash

  2. Perintah Conda bekerja di command prompt tetapi tidak di skrip bash

  3. Periksa apakah ada parameter ke skrip bash yang cocok dengan string

  1. Perbedaan Antara Operator Bash [[ Vs [ Vs ( Vs ((?

  2. Cara Terbaik Mendeteksi (dari Skrip) Apakah Perangkat Lunak Sudah Diinstal?

  3. Bisakah Skrip Dapat Dieksekusi Tetapi Tidak Dapat Dibaca?