Al principio esto fue un poco divertido, como jugar "Bash Roulette" ... pero ahora se está volviendo viejo jajaja
Cualquier comando en mi terminal que salga con un código distinto de cero cierra la ventana de mi terminal
Me dijeron que tal vez he set -e
configurado algún script bash en algún lugar que mi terminal obtenga.
He comprobado .bash_profile
/ .bashrc
/ .profile
y no parece que set -e
esté allí.
¿Habría algún otro culpable obvio?
bash
shell-script
terminal
bashrc
Alexander Mills
fuente
fuente
set +e
, ¿repara el problema? Si es así, lo que supongo, entonces debes seguir buscando esoset -e
. Podría estar en las versiones globales de estos archivos en/etc
, o en cualquier otra secuencia de comandos procedente de ellos. Mueva sus archivos de configuración, si el problema se soluciona, vuelva a agregar las líneas en fragmentos más pequeños para ver dónde se rompe.PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trap
Podría ser informativo.-
, así:echo $-
.Respuestas:
Muy bien, de hecho, fue un desvío lo
set -e
que causó mi problema.La forma en que encontré el
set -e
estaba usandobash -lx
Lo mejor sería usar:
bash -lx > lx.log 2>&1
luego abra ese archivo de registro y busque
set
...Una vez que encuentre ese camino
set -e
, puede eliminar esa línea y su problema debería desaparecer. (El reinicio de la máquina puede ser una buena idea).En mi caso,
set -e
estaba en un archivo que .bash_profile obtiene, pero la línea no estaba en .bash_profile.fuente
source
en su shell son un conjunto mucho más pequeño que solo "scripts de shell aleatorios".-e
puede ser útil en scripts reales, para la comprobación de errores tontos. (O para asegurarse de que no se olvidó de verificar errores.)global set -e
para queset -e
solo afecte el guión que lo contiene$-
para verificar la bandera en la secuencia de comandos interna y restaurar su estado al final, o simplemente restablecerla en la secuencia de comandos principal si sabe que obtuvo secuencias de comandos que la estableceríanlocal set -e
que solo podría usarse en una función bash?Si solo quiere resolver el problema, inclúyalo
set +e
en su.bashrc
- al final.Puedes ir a cavar, hay muchos otros lugares donde
set -e
podría estar, pero eso se encargará del lote.Sin embargo, si
set -e
es parte de su,$PROMPT_COMMAND
entonces lo anterior no funcionará. Intentaprintf '%s\n' "$PROMPT_COMMAND"
ver qué contiene.fuente
printf '%s\n' "$PROMPT_COMMAND"
solo produce espacios en blanco, nada allí$PROMPT_COMMAND
es actualizar el nombre de la pestaña del terminal o el nombre de la ventana; MacOS X y Ubuntu hacen esto. Consulte apple.stackexchange.com/q/220641/151730 para obtener información sobre esto para Mac.set +e
no funcionó, tal vez porque fue antes de laset -e
llamada en mis archivos bash de origen.set +e
a usted.bashrc
, no ponerlo al principio. Lo he hecho explícito en mi respuesta ahora. ¡Qué bueno que hayas encontrado la fuente!set +e
obviamente es solo una tirita, pero tú dijiste eso