発信者の端末を終了せずに終了コードを返しますか?

発信者の端末を終了せずに終了コードを返しますか?

スクリプトから戻り値を取得する際に問題があります。私に問題を引き起こすスクリプトはsecond.sh次のような。しかし、次のスクリプトとの対話があります。first.shそして、この相互作用が問題の原因であるようです。

最初のスクリプトはテストスクリプトで、2番目のスクリプトを駆動します。クロスコンパイル環境を設定するには、2番目のスクリプトが必要です(したがって主なポイントの理由)。その後、最初のスクリプト呼び出しmakeなど様々な変数が設定されます。CXXそしてCXXFLAGS

# first.sh

. ./second.sh arg1
if [ "$?" -eq "0" ]; then
    make
    ...
fi

. ./second.sh arg2
if [ "$?" -eq "0" ]; then
    make
    ...
fi

. ./second.sh arg3
if [ "$?" -eq "0" ]; then
    make
    ...
fi

2番目のスクリプトは通常、ユーザーが独立して実行し、プラットフォーム、アーキテクチャ、その他の機能を検出するため、非常に複雑です。など、さまざまな変数を設定します。CXXそしてCXXFLAGS使用されましたmake最初のスクリプトで。

# second.sh
...

# if success, return 0
exit 0
...

# if failure, return non-0
exit 1

私が経験している問題は電話することです。exit存在するsecond.shターミナルを殺すfirst.shその軌道で完全に止まった。ユーザーが単独で実行しても同様の問題が発生します。

2番目のスクリプトを次のように変更しようとすると:

# second.sh
...

# if success, return 0
return 0

# else for failure, return non-0
return 1

それからfirst.shより、second.shいつも失敗してもreturn 0

ターミナルを終了していないBashの下に戻りコードを追加するにはどうすればよいですか?


これまで私は走ってきました。いいえ最初はスクリプトをテストするため、2番目のスクリプトは成功/失敗を返す必要はありません。ただし、テストを自動化したいので、戻りコードを取得できるはずです。

ベストアンサー1

理想的ではないかもしれない1つのアプローチはdoですalias exit=return。これにより、second.sh終了 do スクリプトが指定されたコードとともに返されます。これは間違いなくこのような関数のネストをブロックしませんが、exitトップexitレベルの呼び出しでは機能します。

結局、これを行う必要があるかもしれませんunalias exit

おすすめ記事