在 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,它会阻止运行更多行。 (但只是安静地进行。在这种情况下,对于错误消息有什么解决方案吗?)