GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Sebuah Script Shell Menghindari Sigpipe Yang Akan Disebabkan Oleh Penggunaan Deskriptor File Tertutup?

Skrip shell dapat kehilangan deskriptor file standar dan file lainnya jika ujung lainnya hilang. Salah satu cara ini bisa terjadi adalah dengan menghentikan ssh klien digunakan untuk meluncurkan skrip:

$ ssh localhost test
^C

Ini meluncurkan bash skrip yang disebut test melalui SSH dan Ctrl C digunakan untuk mengakhiri ssh memerintah. Ini tidak menghentikan test yang terus berjalan tetapi tidak menutup deskriptor file terlampir (mis. input/output/error standar).

Jika test mencoba menggunakan deskriptor file tertutup itu maka itu akan berakhir dengan SIGPIPE . echo sederhana sudah cukup.

Salah satu hal test mungkin memiliki log fungsi yang menggunakan echo untuk menulis pesan ke jurnal systemd dan juga ke kesalahan standar. Sesuatu seperti ini:

log() {
 echo "$*" | systemd-cat -t test
 echo >&2 "$*"
}

echo kedua memunculkan SIGPIPE setelah ssh sesi dimatikan (Ctrl C ). Ini dapat dilindungi, sehingga eksekusi berlanjut tanpa echo yang menyinggung , dengan meletakkan echo dalam subkulit:

( echo >&2 "$*" )

Tapi apakah ada cara yang lebih baik?

Jawaban yang Diterima:

Anda bisa jika Anda ingin mengabaikan SIGPIPE dalam skrip:

trap "" PIPE

Linux
  1. Bagaimana cara mendapatkan nama cabang git saat ini menjadi variabel dalam skrip Shell?

  2. Bagaimana cara menggunakan baris file sebagai argumen perintah?

  3. Bagaimana cara menampilkan isi file secara rekursif?

  1. Cara Menggunakan Perintah Tar di Linux

  2. Bagaimana Membuat File Sementara Di Shell Script?

  3. Bagaimana Cara Menambahkan Data Ke Buffer Dalam Script Shell?

  1. Cara memasukkan file dalam skrip bash shell

  2. Cara menjalankan skrip shell saat startup

  3. Cara mengeksekusi file tanpa ekstensi .sh di shell