Сначала это было немного забавно, как играть в "Bash Roulette" ... но теперь это стареет
Любая команда в моем терминале, которая выходит с ненулевым кодом, закрывает мое окно терминала
Мне сказали, что, возможно, я где-то set -e
установил сценарий bash, который является источником моего терминала.
Я проверил .bash_profile
/ .bashrc
/, .profile
и это не похоже set -e
на там.
Будут ли другие очевидные виновники?
bash
shell-script
terminal
bashrc
Александр Миллс
источник
источник
set +e
, это исправить проблему? Если это так, что я предполагаю, то вам нужно продолжать искать этоset -e
. Это может быть в глобальных версиях этих файлов/etc
или в любом другом скрипте, полученном из них. Отодвиньте свои файлы конфигурации, если проблема устранена, затем добавьте строки меньшими порциями, чтобы увидеть, где они ломаются.PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trap
может быть информативным.-
типа так:echo $-
.Ответы:
Хорошо, действительно, это был странный поступок,
set -e
который вызвал мою проблему.То, как я нашел,
set -e
использовалоbash -lx
Лучше всего использовать:
bash -lx > lx.log 2>&1
затем откройте этот файл журнала и выполните поиск
set
...как только вы найдете это своенравным,
set -e
вы можете удалить эту линию, и ваша проблема должна исчезнуть! (Перезагрузка машины может быть хорошей идеей).В моем случае
set -e
файл находился в источнике .bash_profile, но строка не была в самом файле .bash_profile.источник
source
в вашей оболочке, намного меньше, чем просто «случайные сценарии оболочки».-e
может быть полезен в реальных сценариях, для проверки глупых ошибок. (Или чтобы убедиться, что вы ничего не забыли проверить на ошибки.)global set -e
чтобы что- то подобное было так, чтобы этоset -e
$-
чтобы проверить флаг во внутреннем скрипте и восстановить его состояние в конце, или просто сбросить его в главном скрипте, если вы знаете, что у вас есть скрипты с исходным кодом, которые егоlocal set -e
можно было использовать только функцию bash?Если вы просто хотите решить проблему, включите
set +e
в свой.bashrc
- в конце.Вы можете копать - есть много других мест, где
set -e
может быть, - но это позаботится обо всем.Если, однако,
set -e
является частью вашего,$PROMPT_COMMAND
то выше не будет работать. Попробуйтеprintf '%s\n' "$PROMPT_COMMAND"
и посмотрите, что в этом.источник
printf '%s\n' "$PROMPT_COMMAND"
только пробел, ничего нет$PROMPT_COMMAND
является обновление имени вкладки терминала или окна; MacOS X и Ubuntu оба делают это. См. Apple.stackexchange.com/q/220641/151730 для информации об этом для Mac.set +e
не сделал работу, возможно , потому , что это было до того наset -e
вызове в моем Sourced Баш файлов.set +e
к твоему.bashrc
, а не вставлять его в самом начале. Я сделал это в своем ответе прямо сейчас. Хорошо, что вы нашли источник!set +e
очевидно , это просто пластырь, но вы заявили, что