Bashスクリプトの上部には次の内容があります。
if [[ "$npm_registry_override" != "yes" ]]; then
echo "refusing to source npm.sh script because env is not set."
exit 0;
fi
問題は、環境変数を取得したときに環境変数が設定されていないときに端末ウィンドウが閉じられることです。
私がこうすれば:
if [[ "$npm_registry_override" != "yes" ]]; then
echo "refusing to source npm.sh script because env is not set."
return 0;
fi
bash関数内でなければ、返すことができないというエラー/警告が表示されます。
それで、あなたは何をするつもりですか?私が考えることができる唯一のことは、スクリプト全体をifステートメントでラップすることです。
答え1
これは私が見た行動ではありませんbash
。私のバージョン(4.4.12)にも文書化されていません。
$ cat <<'x' >x.sh
echo "This is x.sh"
return 0
x
$ source x.sh
This is x.sh
$
マニュアルページではreturn
動詞について説明します。
return [n]
- [...]return
関数の外部で使用されますが、.
(source
)コマンドでスクリプトを実行している間、シェルはスクリプトの実行を停止し、次のようにn
スクリプト内で実行された最後のコマンドの終了ステータスを返します。 。
答え2
@roaimaの答えに基づいて、スクリプトの最初にこの行を追加してください。
return 0 2>/dev/null || :
- その後もまだ動作します。
set -e
- 使用しないとエラーメッセージは表示されません
source
。 source
ed の場合、追加の行は実行されません。 (しかし、静かに。この場合、エラーメッセージに対する解決策はありますか?)