GNU/Linux >> Belajar Linux >  >> Linux

Mengatur pipefail untuk satu perintah yang disalurkan

Dari baris perintah Bash Anda perlu menjalankan subkulit untuk menghindari pipefail disetel setelahnya:

$ (set -o pipefail && command1 | command2 | command3)

Ini akan membatasi efek dari pipefail opsi untuk membuat subkulit dengan tanda kurung (...) .

Contoh nyata:

$ (set -o pipefail && false | true) && echo pipefail inactive || echo pipefail active
pipefail active

Jika Anda menggunakan panggilan shell eksplisit dengan -c opsi Anda tidak memerlukan subkulit, baik dengan bash atau dengan sh alias ke bash :

$ bash -c "set -o pipefail && false | true" && echo pipefail inactive || echo pipefail active
pipefail active
$ sh -c "set -o pipefail && false | true" && echo pipefail inactive || echo pipefail active
pipefail active

Sejak sh Anda tidak menerima pipefail opsi, saya harus berasumsi bahwa itu adalah versi bash yang lebih lama atau dimodifikasi - atau sebenarnya itu adalah shell lain sepenuhnya.


Tidak yakin mengapa itu tidak disebutkan di atas, tetapi dimungkinkan untuk menghapus pipefail secara eksplisit , menggunakan set +o pipefail .

set -o pipefail
command1 | command2 | command3
set +o pipefail

Jika Anda mengeksekusi sebuah fragmen, dan tidak yakin tentang pipefail sudah disetel, Anda dapat menggunakan ini dengan subkulit seperti yang disarankan sebelumnya:

# explicitly execute with pipefail set
(set -o pipefail ; command1 | command2 | command3 )
# explicitly execute with pipefail unset
(set +o pipefail ; command1 | command2 | command3 )

Linux
  1. Contoh Perintah DNF Untuk Pemula

  2. Apa yang Mendefinisikan Ukuran Maksimum Untuk Argumen Perintah Tunggal?

  3. Membungkus Perintah Yang Termasuk Kutipan Tunggal Dan Ganda Untuk Perintah Lain?

  1. Bagaimana Membuat Serangkaian Kemungkinan yang Komprehensif Untuk Mendefinisikan "Karakter Perintah" Layar Gnu?

  2. Sintaks yang tepat untuk perintah id -r

  3. Bagaimana mengatur PATH untuk semua pengguna di Debian?

  1. Bagaimana Cara Menonaktifkan Alias ​​​​Di Bash Untuk Satu Perintah??

  2. Bagaimana Cara Menjalankan Aplikasi Untuk Waktu yang Ditetapkan Di Shell?

  3. Setel Kata Sandi untuk Mode Pengguna Tunggal di Linux (CentOS/RHEL)