Сначала это было немного забавно, как игра в «Bash Roulette»… но теперь это надоело, лол.
Любая команда в моем терминале, которая завершается с ненулевым кодом, закрывает мое окно терминала.
Мне сказали, что, возможно, я set -e
установил где-то какой-то скрипт bash, который использует мой терминал.
Я проверил .bash_profile
/ .bashrc
/ .profile
и, похоже, его set -e
там нет.
Есть ли еще какие-то очевидные виновники?
решение1
Ну ладно, действительно, именно непутевый человек стал set -e
причиной моих неприятностей.
Я нашел способ, которым set -e
использовалbash -lx
Лучше всего использовать:
bash -lx > lx.log 2>&1
затем откройте этот файл журнала и выполните поиск set
...
как только вы обнаружите, что что-то не так, set -e
вы можете удалить эту линию, и ваша проблема должна исчезнуть! (Хотя перезагрузка компьютера может быть хорошей идеей).
В моем случае строка set -e
находилась в файле, который является источником .bash_profile, но в самом .bash_profile ее не было.
решение2
Если вы просто хотите решить проблему, включите set +e
в свой .bashrc
— вконец.
Вы можете заняться раскопками — есть много других мест, где set -e
может быть , — но это решит все проблемы.
Однако, если set -e
это часть вашего, $PROMPT_COMMAND
то вышесказанное не сработает. Попробуйте printf '%s\n' "$PROMPT_COMMAND"
и посмотрите, что в нем.
решение3
В моем случае set -e
не было ни в одном из моих запусков bash, и добавление set +e
к моему файлу .bashrc
не исправило ситуацию.
Оказывается, это set -e
был скрипт bash, который я часто запускаю для своего проекта, и я запускал этот скрипт, используя . ./my-dev-script.sh
его, чтобы онуважайте мои псевдонимы bash.
Чего я не осознавал, так это то, что запуск его с этим дополнительным параметром .
в начале также приводил к тому, что параметры bash в скрипте переносились во все мои обычные сеансы работы в терминале.
Мне нужно новое решение для запуска скрипта bash, который будет учитывать мои личные псевдонимы bash, но, по крайней мере, я нашел источник мошеннического set -e
. Простой запуск его в обычном режиме с помощью ./my-dev-script.sh
предотвращает раздражающий сценарий "Bash Roulette".