Bashスクリプトがスクリプト自体に入るのを防ぎます

Bashスクリプトがスクリプト自体に入るのを防ぎます

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
  • sourceed の場合、追加の行は実行されません。 (しかし、静かに。この場合、エラーメッセージに対する解決策はありますか?)

関連情報