我正在尝试按如下方式从 Bash 设置环境变量,但是当我尝试使用或bash -c 'export FOO=BAR'
读取先前设置的变量时,我可以看到该变量未初始化并且命令返回空行。echo $FOO
bash -c 'echo $FOO'
我如何能够使用 Bash 从命令行设置环境变量,以使其可以从bash -c 'export FOO=BAR'
首先启动程序(即)的同一个 shell 进行访问?
答案1
当您运行时,会生成bash -c 'FOO=bar'
一个新实例,该实例执行该命令,然后立即终止。该变量存在的时间只有一小部分,然后就消失了,就像它从未存在过一样。bash
FOO=bar
FOO
您所指的示例文档做了其他事情,与此非常相似:
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 自己的环境中;它们只是添加到执行的程序中。