Bagaimana cara membatalkan efek "set -e" yang membuat bash segera keluar jika ada perintah yang gagal?

205

Setelah memasukkan set -ebash shell interaktif, bash akan segera keluar jika ada perintah yang keluar dengan nol. Bagaimana saya bisa membatalkan efek ini?

Tianyi Cui
sumber

Jawaban:

309

Dengan set +e. Ya, itu mundur yang memungkinkan pilihan shell dengan set -dan menonaktifkan mereka dengan set +. Kismis bersejarah, donchanow.

zwol
sumber
Terima kasih banyak, ini adalah di antara baris terakhir dari halaman manual yang sesuai ( faqs.org/docs/bashman/bashref_56.html ) yang saya tidak baca sampai akhir.
Tianyi Cui
Manual bash sangat menakutkan, itu benar. (FYI, karena Anda tampaknya baru: itu adalah hal yang dilakukan untuk mengklik tanda centang di bawah jawaban terbaik untuk pertanyaan Anda, ini disebut "menerimanya".)
zwol
12
Sayangnya, bahasa shell Unix (yang sebagian besar tidak spesifik untuk 'bash') adalah salah satu bahasa pemrograman yang paling tidak konsisten secara internal masih digunakan secara luas saat ini. Anda harus belajar lebih banyak tentang kutil kecil ini. Dan saya akan mengatakan itu adalah bug dokumentasi, di sana.
zwol
10
anggur sejarah adalah neraka kismis!
James
2
Akhirnya, bashing yang tidak adil dari Bash: dash tunggal adalah opsi baris perintah POSIX shell standar, dan karenanya paling alami untuk "melakukan sesuatu". +seperti -tetapi menyeberangi sesuatu berarti "tidak" seperti dalam "≠".
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
68

Mungkin tidak nyaman untuk menggunakan set +e/ set -esetiap kali Anda ingin menimpanya . Saya menemukan solusi yang lebih sederhana.

Alih-alih melakukannya seperti ini:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

Anda bisa melakukannya seperti ini:

command_that_might_fail_but_we_want_to_ignore_it || true

atau, jika Anda ingin menyimpan penekanan tombol dan tidak keberatan menjadi sedikit samar:

command_that_might_fail_but_we_want_to_ignore_it || :

Semoga ini membantu!

szeryf
sumber
11
Bertanya-tanya tentang sejarah :, dan menemukan jawaban saya di sini , kalau-kalau ada orang lain yang penasaran.
3cheesewheel
4
Ini hanya berlaku jika Anda tidak peduli dengan kode pengembalian dari perintah yang Anda jalankan.
Isaac
20
  • Menggunakan + daripada - menyebabkan bendera ini dimatikan.

Sumber

mhitza
sumber