終端機中以非零代碼退出的任何命令都會關閉我的終端機窗口

終端機中以非零代碼退出的任何命令都會關閉我的終端機窗口

起初這有點有趣,就像玩「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到 my.bashrc並不能修復它。

事實證明,它set -e位於我經常為我的專案運行的 bash 腳本中,並且我正在運行該腳本,. ./my-dev-script.sh以便它尊重我的 bash 別名

我沒有意識到的是,.在前面添加額外的內容來運行它也會導致腳本中的 bash 選項延續到我所有的常規終端會話中。

我需要一個新的解決方案來運行 bash 腳本,以尊重我的個人 bash 別名,但至少我找到了 rogue 的來源set -e。只要正常運行它就./my-dev-script.sh可以防止令人沮喪的“Bash Roulette”場景。

相關內容