Awalnya ini agak lucu, seperti bermain "Bash Roulette" ... tapi sekarang sudah semakin tua lol
Perintah apa pun di terminal saya yang keluar dengan kode bukan nol menutup jendela terminal saya
Saya diberitahu bahwa mungkin saya telah set -e
mengatur beberapa bash script di suatu tempat yang sumber terminal saya.
Saya telah memeriksa .bash_profile
/ .bashrc
/ .profile
dan sepertinya tidak set -e
ada di sana.
Apakah akan ada pelakunya yang jelas?
bash
shell-script
terminal
bashrc
Alexander Mills
sumber
sumber
set +e
, apakah itu memperbaiki masalah? Jika demikian, yang saya asumsikan, maka Anda harus terus mencari ituset -e
. Itu bisa dalam versi global file-file ini di bawah/etc
, atau dalam skrip lain yang bersumber dari mereka. Pindahkan file konfigurasi Anda, jika masalahnya sudah diperbaiki kemudian tambahkan kembali baris dalam potongan yang lebih kecil untuk melihat di mana ia rusak.PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trap
bisa informatif.-
seperti:echo $-
.Jawaban:
Baiklah, memang benar, itu bandel
set -e
yang menyebabkan masalah saya.Cara saya menemukan
set -e
menggunakanbash -lx
Hal terbaik untuk dilakukan adalah menggunakan:
bash -lx > lx.log 2>&1
kemudian buka file log itu dan lakukan pencarian untuk
set
...setelah Anda menemukan jalan yang salah
set -e
Anda dapat menghapus garis itu dan masalah Anda harus hilang! (Mesin restart mungkin ide yang bagus untukmu).Dalam kasus saya, file
set -e
tersebut ada dalam file yang .bash_profile sumber, tetapi barisnya tidak ada di .bash_profile itu sendiri.sumber
source
di shell Anda adalah kumpulan yang jauh lebih kecil dari sekadar "script shell acak".-e
dapat berguna dalam skrip aktual, untuk memeriksa kesalahan bodoh. (Atau untuk memastikan Anda tidak lupa memeriksa kesalahan apa pun.)global set -e
sehinggaset -e
hanya mempengaruhi script yang mengandung$-
untuk memeriksa bendera di skrip dalam dan mengembalikanlocal set -e
hanya bisa digunakan dalam fungsi bash?Jika Anda hanya ingin menyelesaikan masalah, sertakan -
set +e
Anda.bashrc
di akhir.Anda bisa menggali — ada banyak tempat lain di mana
set -e
mungkin berada — tetapi itu akan mengurus semuanya.Namun, jika itu
set -e
adalah bagian dari Anda$PROMPT_COMMAND
maka hal di atas tidak akan berfungsi. Cobaprintf '%s\n' "$PROMPT_COMMAND"
dan lihat apa isinya.sumber
printf '%s\n' "$PROMPT_COMMAND"
menghasilkan hanya ruang kosong, tidak ada di sana$PROMPT_COMMAND
adalah untuk memperbarui nama tab terminal atau nama jendela; MacOS X dan Ubuntu melakukan keduanya. Lihat apple.stackexchange.com/q/220641/151730 untuk data tentang ini untuk Mac.set +e
tidak bekerja, mungkin karena itu sebelum paraset -e
panggilan dalam file pesta bersumber saya.set +e
ke Anda.bashrc
, bukan memasukkannya di awal. Saya telah membuat itu secara eksplisit dalam jawaban saya sekarang. Bagusnya Anda menemukan sumbernya!set +e
itu hanyalah bantuan band, tapi Anda menyatakan bahwa