No começo isso foi um pouco engraçado, como jogar "Bash Roulette" ... mas agora está ficando velho lol
Qualquer comando no meu terminal que saia com código diferente de zero fecha minha janela do terminal
Foi-me dito que talvez eu tenha set -e
definido algum script bash em algum lugar que minhas fontes terminais.
Eu verifiquei .bash_profile
/ .bashrc
/ .profile
e não parece set -e
estar lá.
Haveria outros culpados óbvios?
bash
shell-script
terminal
bashrc
Alexander Mills
fonte
fonte
set +e
, ele corrige o problema? Se sim, o que suponho, então você precisa continuar procurando por issoset -e
. Pode estar nas versões globais desses arquivos em/etc
ou em qualquer outro script originado a partir deles. Afaste os arquivos de configuração, se o problema for resolvido, adicione novamente as linhas em pedaços menores para ver onde eles quebram.PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trap
pode ser informativo.-
assim:echo $-
.Respostas:
Tudo bem, de fato, foi um rebelde
set -e
que causou o meu problema.O jeito que eu encontrei
set -e
estava usandobash -lx
A melhor coisa a fazer seria usar:
bash -lx > lx.log 2>&1
abra esse arquivo de log e faça uma pesquisa por
set
...Uma vez que você achar que é rebelde,
set -e
você pode remover essa linha e seu problema deve desaparecer! (A reinicialização da máquina pode ser uma boa ideia).No meu caso, o
set -e
arquivo estava em um arquivo com fontes .bash_profile, mas a linha não estava no próprio .bash_profile.fonte
source
no seu shell é um conjunto muito menor do que apenas "scripts aleatórios do shell".-e
pode ser útil em scripts reais, para verificação de erro estúpido. (Ou para se certificar de que você não esquecer de erro de verificação de qualquer coisa.)global set -e
de modo queset -e
só afeta o script que contém$-
o sinalizador no script interno e restaurar seu estado no final, ou apenas redefini-lo no script principal se souber que possui scripts de origem que olocal set -e
que só poderia ser usado em uma função bash?Se você quiser apenas resolver o problema, inclua
set +e
no seu.bashrc
- no final.Você pode cavar - há muitos outros lugares onde
set -e
pode estar - mas isso vai cuidar disso.Se, no entanto, o fizer
set -e
parte do seu$PROMPT_COMMAND
, o procedimento acima não funcionará. Experimenteprintf '%s\n' "$PROMPT_COMMAND"
e veja o que há nele.fonte
printf '%s\n' "$PROMPT_COMMAND"
gera apenas espaço em branco, nada lá #$PROMPT_COMMAND
é atualizar o nome da guia do terminal ou o nome da janela; O MacOS X e o Ubuntu fazem isso. Consulte apple.stackexchange.com/q/220641/151730 para obter dados sobre isso no Mac.set +e
não funcionou, talvez porque foi antes daset -e
chamada nos meus arquivos bash de origem.set +e
ao seu.bashrc
, não colocá-lo no início. Eu fiz isso explícito na minha resposta agora. Que bom que você encontrou a fonte!set +e
obviamente , é apenas um curativo, mas você afirmou que