起初這有點有趣,就像玩「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”場景。