Terminalimde sıfır kod olmadan çıkan herhangi bir komut terminal penceremi kapatıyor


22

İlk başta bu biraz komikti, "Bash Roulette" oynamak gibi ... ama şimdi eski lol oluyor

Terminalimde sıfır kod olmadan çıkan herhangi bir komut terminal penceremi kapatıyor

Belki set -eterminal kaynaklarımın olduğu bir bash betiğinde ayarlamış olduğum söylendi .

Kontrol ettim .bash_profile/ .bashrc/ .profileve set -eorada görünmüyor .

Başka bariz suçlular olur mu?


7
Yürüt set +e, problemi tamir ediyor mu? Eğer öyleyse, ki varsayalım, o zaman aramaya devam etmelisin set -e. Bu dosyaların genel sürümlerinde /etcveya bunlardan kaynaklanmış diğer herhangi bir komut dosyasında olabilir. Konfigürasyon dosyalarınızı uzaklaştırın, eğer sorun çözüldüyse, nerede kırıldığını görmek için satırları küçük parçalara geri ekleyin.
egmont

3
PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trapbilgilendirici olabilir.
muru

Sen özel değişkenle anda etkin kabuk bayrakları kümesini inceleyebilirsiniz -şöyle: echo $-.
David Foerster

Yanıtlar:


21

Tamam, gerçekten de, sorunuma set -esebep olan bir yoluydu .

Bulduğum şekilde set -ekullanıyordubash -lx

Yapılacak en iyi şey kullanmak olacaktır:

bash -lx > lx.log 2>&1

sonra bu günlük dosyasını açın ve bir arama yapın set...

o yolu doğru bulduğunuzda bu set -eçizgiyi kaldırabilirsiniz ve sorununuz giderilmelidir! (Makinenin yeniden başlatılması iyi bir fikir olabilir tho).

Benim durumumda, set -e.bash_profile kaynaklarının bulunduğu bir dosyadaydı, ancak satır .bash_profile dosyasının içinde değildi.


3
sourceKabuğunuzda güvenli olan şeyler "rastgele kabuk komut dosyalarından" çok daha küçük bir kümedir. -eaptal hata denetimi için, gerçek komut dosyalarında yararlı olabilir. (Ya da herhangi bir şeyi kontrol etmeyi unutmadığınızdan emin olmak için.)
Peter Cordes

Görünüşe vakasında olduğu ... ben böyle bir şey olsaydı global set -e, böylece set -esadece içeren senaryoyu etkiler
Alexander Mills

@AlexanderMills, bunu yapmak için, size kontrol edebilir $-Eğer bunu belirleyecek komut dosyalarını kaynaklı var biliyorsanız iç komut bayrağı denetlemek ve sonunda devlet geri, ya da sadece ana senaryoya sıfırlamak
ilkkachu

Yani local set -esadece bir bash işlevinde kullanılabilir sanırım ?
Alexander Mills,

13

Sadece sorunu çözmek istiyorsanız , sonunda - dahilinize set +eekleyin ..bashrc

Kazmaya gidebilirsin - set -ebelki olabileceği başka yerler de var - ama bu olayı halledecek.

Ancak, bunun set -ebir parçası ise $PROMPT_COMMAND, yukarıdaki işe yaramaz. Deneyin printf '%s\n' "$PROMPT_COMMAND"ve içinde ne olduğunu görmek.


makinemde, bir terminal açtığımda, printf '%s\n' "$PROMPT_COMMAND"sadece boşluk
Alexander Mills

@AlexanderMills, o zaman problemin bu değil. Yaygın olarak kullanılan bir kullanım $PROMPT_COMMAND, terminal sekmesinin adını veya pencere adını güncellemektir; MacOS X ve Ubuntu bunu yapar. Mac'teki veriler hakkında bilgi için apple.stackexchange.com/q/220641/151730 adresine bakın .
Wildcard

Ben, soruna bir cevap buldum ve kendi cevap eklenen set +eöyleydi belki de değil çalışma yaptı önceset -e benim kaynaklı bash dosyalarında çağrı.
Alexander Mills,

1
@AlexanderMills, evet, bunun dolaylı olduğunu düşündüm. Ben anlamına eklemek set +e adresinden Müşteri .bashrcdeğil, başında koydu. Şimdi cevabımda bu açık yaptı. Kaynağı bulman iyi oldu!
Wildcard

Evet, set +eaçıkçası sadece bir yara bandı, ama sen söyledin
Alexander Mills
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.