例を見てみましょう。私の main.sh では、a.sh と b.sh をソースにしたいと考えています。ただし、a.sh はすでに b.sh をソースしている可能性があります。したがって、b.sh のコードが 2 回実行されます。C++に「インクルードガード」に似たメカニズムはありますか?
2114 次
3 に答える
9
スクリプトをソースしている場合、通常はそれらを使用して関数や変数を定義しています。
つまり、スクリプトが定義する関数または変数 (の 1 つ) をテストすることで、スクリプトが以前にソース化されたかどうかをテストできます。
例 ( b.sh
):
if [ -z "$B_SH_INCLUDED" ]
then
B_SH_INCLUDED=yes
...rest of original contents of b.sh
fi
私が知っている他の方法はありません。特に、ファイルを取得するシェルに影響を与えるため、早期終了または復帰を行うことはできません。ファイル専用の名前を使用する必要はありません。ファイルが常に定義している名前を使用できます。
于 2011-09-22T17:06:03.597 に答える
8
bash では、アーリー リターンはソーシング ファイルに影響を与えず、現在のファイルが関数であるかのようにソース ファイルに戻ります。コンテンツ全体を でラップすることを避けるため、私はこの方法を好みif...fi
ます。
if [ -n "$_for_example" ]; then return; fi
_for_example=`date`
于 2014-07-31T02:22:25.610 に答える