はい; return
を使用できます exit
の代わりに .その主な目的はシェル関数から戻ることですが、 source
内で使用すると -d script、そのスクリプトから戻ります。
Bash Reference Manual の §4.1「Bourne Shell Builtins」として つまり:
return [n]
シェル関数を戻り値 n で終了させる .If n が指定されていない場合、戻り値は関数で実行された最後のコマンドの終了ステータスです。これは、実行中のスクリプトの実行を
.
で終了するためにも使用できます。 (またはsource
) 組み込み、n のいずれかを返す または、スクリプト内で実行された最後のコマンドの終了ステータスを、スクリプトの終了ステータスとして指定します。RETURN
に関連付けられたコマンド トラップは、関数またはスクリプトの後で実行が再開される前に実行されます。return
の場合、戻りステータスはゼロ以外です。.
によるスクリプトの実行中ではなく、関数の外で使用されます またはsource
.
. run2.sh
を使用してスクリプトを実行する代わりに 、 sh run2.sh
を使用して実行できます または bash run2.sh
スクリプトを実行するために新しいサブシェルが開始され、スクリプトの最後でサブシェルが閉じられ、他のシェルは開いたままになります。
「問題」は、スクリプトを実行していないことです。ファイルをソースすると、サブシェルを生成する代わりに、その内容が現在のシェルで実行されます。したがって、exit を含むすべてが現在のシェルに影響します。
exit
を使用する代わりに 、 return
を使用する必要があります .
return ステートメント/コマンドの後に追加の終了コマンドを追加して、コマンド ラインからのスクリプトの実行とターミナルからのソースの両方で機能するようにすることができます。
スクリプトの終了コードの例:
if [ $# -lt 2 ]; then
echo "Needs at least two arguments"
return 1 2>/dev/null
exit 1
fi
exit
のある行 return
の後にスクリプトをソースすると、コマンドは呼び出されません コマンド。
スクリプトを実行すると、 return
コマンドでエラーが発生します。そのため、エラー メッセージを /dev/null
に転送して抑制します。 .