访问使用“bash -c 'export FOO=BAR'”设置的环境变量

访问使用“bash -c 'export FOO=BAR'”设置的环境变量

我正在尝试按如下方式从 Bash 设置环境变量,但是当我尝试使用或bash -c 'export FOO=BAR'读取先前设置的变量时,我可以看到该变量未初始化并且命令返回空行。echo $FOObash -c 'echo $FOO'

我如何能够使用 Bash 从命令行设置环境变量,以使其可以从bash -c 'export FOO=BAR'首先启动程序(即)的同一个 shell 进行访问?

答案1

当您运行时,会生成bash -c 'FOO=bar'一个新实例,该实例执行该命令,然后立即终止。该变量存在的时间只有一小部分,然后就消失了,就像它从未存在过一样。bashFOO=barFOO

您所指的示例文档做了其他事情,与此非常相似:

bash -c 'export FOO=bar; run_some_entry_point'

细节略有不同;执行脚本来source定义变量,并&&用于连接命令以避免在命令source失败时运行入口点:

bash -c 'source file_containing_variable_exports && run_some_entry_point'

最重要的一点是,这是由单个 shell 实例执行的单个命令。 shell 实例定义标记为导出的变量,然后在这些导出变量存在的环境中,它启动容器(或其他)入口点。

上述命令的此版本将不起作用:

bash -c 'export FOO=bar'; run_some_entry_point

在这里,定义环境变量的 bash 实例终止,并带走该变量;原始 shell 运行入口点,没有该变量。

顺便说一句,要运行带有某些环境变量的命令,您不需要使用单独的export命令。 shell 有一个语法:

bash -c 'FOO=bar some_program arg ...'

可以给出多个变量。这些变量没有设置到 shell 自己的环境中;它们只是添加到执行的程序中。

相关内容