首页 > 解决方案 > 将环境变量传递给嵌套的子级

问题描述

我有一些正在设置的环境变量,并试图通过子进程的子进程访问它们。我正在尝试使用 shell 启动另一个进程。在我的示例中,它只是另一个使事情变得简单的 shell 脚本。

我浏览了 shell 文档,并尝试使用该-a标志,但没有奏效。如果我明确地将环境变量从父级复制到子级,它将起作用。

#!/bin/sh
# does not work here

 echo $FOO

父.sh

#!/bin/sh
export FOO=bar
sudo -H -u username nohup sh -c "echo $FOO #works here; sh ./a.sh"

但是,如果我将 FOO 显式传递给内联 shell 脚本,它将起作用

#!/bin/sh

export FOO=bar
sudo -H -u username nohup sh -c "echo $FOO;export FOO=$FOO; sh ./a.sh"

将环境变量传递给嵌套子级是否有更优雅的解决方案?

在我的实际实现代码中,它不是我尝试使用的 shell 脚本,而是启动另一个依赖于 env 变量的进程,因此获取脚本是不可行的。

标签: linuxbashshellenvironment-variablessh

解决方案


因为 sudo 在启动新进程时默认不保留环境,所以您应该指示它显式保留某个 var:

sudo FOO=100 -H -u username nohup sh -c "sh ./a.sh"
nohup: ignoring input and appending output to ‘nohup.out’
cat nohup.out
100

推荐阅读