我写了一个 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
。
我期望$username
inprocess.sh
应该打印为“ravi”,因为主进程 ( testmain.sh
) 和子进程 ( process.sh
) 共享相同的进程 ID。但是,我看到 中的用户名没有打印任何内容process.sh
。
为什么 shell 会有这样的行为?我究竟做错了什么?
答案1
如果要将变量传递到外部命令的环境(即使是exec
d 命令),则必须导出变量。否则你就得看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
继承环境变量(就像通常运行命令时一样),但未导出的变量不会添加到环境中。