防止在脚本本身中获取 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) 命令执行脚本期间,它会导致 shell 停止执行该脚本并返回n脚本内执行的最后一个命令的退出状态,如下所示脚本的退出状态。

答案2

基于@roaima 的回答:在脚本的早期添加此行。

return 0  2>/dev/null || :
  • 即使在之后它仍然有效set -e
  • 不使用时不会显示错误消息source
  • source如果ed,它会阻止运行更多行。 (但只是安静地进行。在这种情况下,对于错误消息有什么解决方案吗?)

相关内容