GNU/Linux >> Belajar Linux >  >> Linux

Apakah Menjalankan “exec Echo Some; Echo Test" Di Bash Tidak Pernah Mencetak "some Test"?

Apakah menjalankan exec echo "some "; echo "test" di bash tidak pernah mencetak "beberapa tes"?

Saya akan mencari konfirmasi untuk pertanyaan ini, karena saya sedang menulis skrip shell kecil dan saya ingin agar tidak melanjutkan apa pun setelah exec perintah telah dipanggil.

Saya pikir saya tidak perlu khawatir, sebagai pemahaman saya, setelah berkonsultasi:

  • man 3 exec
  • man 1p exec

Script shell, ketika dijalankan oleh shell akan membuat

  1. shell menjalankan program exec , yang
  2. menggunakan exec*** panggilan sistem keluarga yang menggantikan shell/bash yang telah menjalankan skrip, dengan penghalang ini tindakan lebih lanjut dari shell (yang "diganti")

Seperti yang dijelaskan sebelumnya, tujuan utama dari pertanyaan ini adalah untuk mencari konfirmasi atas alasan saya untuk mencegah bahwa apa pun dalam skrip terjadi setelah exec (seperti echo test ) akan dieksekusi.

Saya akan menghargai jawaban umum (POSIX), sejauh mungkin, tetapi hanya dalam kasus kekhususan saya paling tertarik pada GNU/Linux dan GNU/Bash

Jawaban yang Diterima:

exec selalu menyelesaikan skrip jika itu menjalankan perintah dan melakukannya dengan sukses (tidak terkait dengan kode keluar perintah tetapi untuk memulainya).

exec dapat dijalankan tanpa perintah dengan cara yang sangat berguna:Untuk mengalihkan deskriptor file secara permanen:

exec 3>/path/to/file

Jika perintah tidak dapat dimulai maka perilaku shell tergantung pada konfigurasi. bash keluar secara default.

Mungkin sebaiknya Anda menggunakan fungsi sebagai gantinya:

safe_exec () {
    cmd="$1"
    if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
        exit 1
    else
        exec "[email protected]"
    fi
}

safe_exec echo "some "; echo "test"

Linux
  1. Mencegah skrip bash berjalan secara bersamaan

  2. Apakah ~ Selalu Sama dengan $home?

  3. Mengapa Substitusi Proses Bash Tidak Bekerja Dengan Beberapa Perintah?

  1. Apa Arti -s Dan [[]] Dalam Kondisi If Di Bash?

  2. Apa yang Digema $? Mengerjakan??

  3. Saya ingin menyimpan semua argumen baris perintah ke skrip Bash ke dalam satu variabel

  1. Bagaimana cara menguji apakah suatu variabel adalah angka di Bash?

  2. Bash/sh pernyataan 'jika lain'

  3. Apa yang dilakukan 'bash -c'?