bash 使用 exec 启动脚本时未获取配置文件

bash profile not sourced when using exec for launching a script

出于技术原因,我必须启动一个脚本来设置用于执行脚本的 GROUP ID,如下所示:

exec sg group_name script

该脚本正在使用 .bashrc 源代码中的一些函数,如果我直接启动脚本,一切正常,但是当我使用 exec sg 时,源函数不可用。

.bash_profile 仅来源于 login shells。使用传递给它的命令行调用的 shell 不是登录 shell;作为脚本解释器调用的 shell 不是登录 shell.

如果您希望文件来自 bash 的非登录、非交互式副本(具体而言),请将该文件的名称放入环境变量 BASH_ENV 中。要对严格 POSIX 兼容的 shells(或 bash 运行ning 在 POSIX 兼容模式下执行相同操作,请使用名称 ENV相反。

因此:

cat >yourscript.bash <<'EOF'
somefunc() { whatever; }
EOF

export BASH_ENV=$PWD/yourscript.bash

exec sg group_name yourscript

...并且 yourscript 将能够 运行 somefunc.

但实际上,最好不要那样做;相反,让 yourscript 显式获取任何定义它需要的函数的库,因此它的操作行为独立于哪个用户调用它。