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
显式获取任何定义它需要的函数的库,因此它的操作行为独立于哪个用户调用它。
出于技术原因,我必须启动一个脚本来设置用于执行脚本的 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
显式获取任何定义它需要的函数的库,因此它的操作行为独立于哪个用户调用它。