Bu unutulmamalıdır if...then...fi
ve &&
/ ||
biz (başarısına 0) test etmek istiyorum komutu tarafından döndürülen çıkış durumu ile yaklaşım fırsatlar tipi; bununla birlikte, bazı komutlar, komut başarısız olursa veya girişle baş edemediğinde sıfır olmayan bir çıkış durumu döndürmez. Bu, olağan if
ve &&
/ ||
yaklaşımların bu belirli komutlar için işe yaramayacağı anlamına gelir .
Örneğin, Linux'ta GNU file
argüman olarak mevcut olmayan bir dosya aldıysa ve find
belirtilen dosya kullanıcısını bulamadıysa hala 0 ile çıkar .
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
Bu gibi durumlarda, durumu ele alabilmemizin olası bir yolu , örn. Komutla döndürülenler veya komutun çıktısını ayrıştırma gibi , stderr
/ stdin
mesaj okumaktır . Bu amaçla, ifade kullanılabilir.file
find
case
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Bu, unix.stackexchange.com adresindeki ilgili soruya verilen cevabımın bir kopyasıdır )