最初は「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スクリプトを実行するための新しいソリューションが必要ですが、少なくともrogueのソースを見つけましたset -e
。正しく実行するだけで、./my-dev-script.sh
残念な「Bash Roulette」シナリオを防ぐことができます。