GNU/Linux >> Belajar Linux >  >> Linux

Cara mendapatkan status keluar satu lingkaran di bash

Sesuatu seperti ini?

while true; do
    case $RANDOM in *0) exit 27 ;; esac
done

Atau seperti ini?

rc=0
for file in *; do
    grep fnord "$file" || rc=$?
done
exit $rc

Pertanyaan sebenarnya adalah memutuskan apakah kode keluar dari loop harus berhasil atau gagal jika satu iterasi gagal. Ada skenario di mana yang satu lebih masuk akal daripada yang lain, dan yang lain sama sekali tidak jelas.


Status loop adalah status dari perintah terakhir yang dieksekusi. Anda dapat menggunakan break untuk keluar dari loop, tetapi jika break berhasil, maka status loop akan menjadi 0 . Namun, Anda dapat menggunakan subkulit dan keluar alih-alih melanggar. Dengan kata lain:

for i in foo bar; do echo $i; false; break; done; echo $?  # The loop succeeds
( for i in foo bar; do echo $i; false; exit; done ); echo $? # The loop fails

Anda juga bisa memasukkan loop ke dalam suatu fungsi dan mengembalikan nilai darinya. misalnya:

in() { local c="$1"; shift; for i; do test "$i" = "$c" && return 0; done; return 1; }

Manual bash mengatakan:

while list-1; do list-2; done
until list-1; do list-2; done
  [..]The exit status of the while and until commands is the exit status
  of the last command executed in list-2, or zero if none was executed.[..]

Perintah terakhir yang dijalankan di dalam loopnya adalah break . Dan nilai keluar dari break adalah 0 (lihat:help break ).

Inilah mengapa program Anda terus keluar dengan 0.


Linux
  1. Bagaimana cara mendapatkan status keluar dari perintah Shell yang digunakan di GNU Makefile?

  2. Bagaimana cara mendapatkan direktori absolut dari sebuah file di bash?

  3. Bash:Ulangi hingga status keluar perintah sama dengan 0

  1. Bagaimana Mendapatkan Informasi Lebih Lanjut Tentang Asal Usul Kode Keluar?

  2. Bagaimana cara mendapatkan kode keluar dari proses pemijahan di skrip Shell yang diharapkan?

  3. Cara berhenti menjalankan kunci layar

  1. Bagaimana Cara Mendapatkan Versi Ksh dengan Aman?

  2. Bash + Bagaimana Cara Keluar Dari Skrip Sekunder Dan Dari Skrip Utama Pada Kedua Kalinya?

  3. Bagaimana Bash Mengevaluasi Kode Berikut?