Kontrol aliran Linux keluar ke terminal jika gagal

0

Saya punya pertanyaan dengan kontrol aliran. Saya ingin keluar dari skrip ke terminal ketika pesannya adalah:, HOSTNAME NOT ADDED IN /tmp/hosts EXITINGyang merupakan pesan kegagalan.

if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts; then
  echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]; then
  echo " HOSTNAME NOT ADDED IN /tmp/hosts EXITING"; exit
fi|tee -a /tmp/log;

Saya mencoba skrip di atas, tetapi gagal keluar saat gagal. Bagaimana cara saya memperbaikinya?

pengguna2692634
sumber

Jawaban:

0

Saya percaya bahwa masalahnya adalah bahwa, setiap kali Anda membuat pipa, shell menempatkan kedua belah pihak ke dalam proses yang terpisah, bahkan jika itu tidak harus. Khususnya, blok pernyataan if- Anda fiberjalan dalam proses terpisah dari skrip shell itu sendiri, jadi exitpernyataan Anda hanya mengakhiri ifblok - pada titik di mana itu akan berakhir, bagaimanapun - sehingga tidak menghasilkan apa-apa.

Mungkin ada beberapa cara untuk memperbaikinya - mungkin lebih bersih daripada yang berikut - tetapi saya tidak memiliki akses ke sistem * nix saat ini untuk menguji salah satunya. Cara sederhana yang seharusnya berfungsi adalah menggunakan file flag:

exit_flag_file="/tmp/my_exit.$$"
rm –f "$exit_flag_file"
if grep -o 'abcdefgh01.was.db.dcbc' /tmp/hosts
then
    echo " HOSTNAME ADDED IN /tmp/hosts"
elif [ $?==1 ]
then
    echo " HOSTNAME NOT ADDED IN /tmp/hosts; EXITING"
    > "$exit_flag_file"
fi | tee -a /tmp/log
if [ -f "$exit_flag_file" ]
then
    exit
fi
Scott
sumber