Shell 脚本 – 在 `exec` 之后新脚本不继承父脚本的值

Shell 脚本 – 在 `exec` 之后新脚本不继承父脚本的值

我写了一个 shell 脚本,名为testmain.sh

username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

process.sh是:

echo "In subprocess the process ID is:"
echo $$
echo $username

我正在用 执行它./testmain.sh

我期望$usernameinprocess.sh应该打印为“ravi”,因为主进程 ( testmain.sh) 和子进程 ( process.sh) 共享相同的进程 ID。但是,我看到 中的用户名没有打印任何内容process.sh

为什么 shell 会有这样的行为?我究竟做错了什么?

答案1

如果要将变量传递到外部命令的环境(即使是execd 命令),则必须导出变量。否则你就得看source剧本了。

所以要么:

export username="ravi"
echo "The main ProcessId: "
echo $$
exec ./process.sh

或者:

username="ravi"
echo "The main ProcessId: "
echo $$
. ./process.sh  # source the script

这是因为,虽然exec继承环境变量(就像通常运行命令时一样),但未导出的变量不会添加到环境中。

相关内容