导出环境变量 bash



我正在尝试创建一个bash脚本,该脚本每次运行脚本时都会切换输出(对于polybar中的某些功能(。在我看来,最简单的方法是基于环境变量的值,但它没有按预期工作。

这是我编写的用于测试的脚本,假设此脚本由其他内容运行,并且可以访问 env 变量。

echo $STATE
if [[ $STATE == "public" ]]; then
echo foo
export STATE='private'
elif [[ $STATE == "private" ]]; then
echo bar
export STATE='public'
fi
echo $STATE

我想要的输出是

$ ./test.sh
public
foo
private
$ ./test.sh
private
bar
public

但实际输出是

$ ./test.sh
public
foo
private
$ ./test.sh
public
foo
private

似乎export调用不是持久的

您的脚本作为当前 shell 的子级运行。子进程不能直接修改其父进程的环境。这包括环境变量、当前工作目录、如何处理信号等。进程只能修改其环境,并隐式修改其启动的任何进程的环境。

脚本中的export工作正常。但它只修改该脚本或它生成的任何子进程(例如,其他脚本(的值。根据定义,它不能更改其父进程中的值。

解决方案 1:将脚本实现为 shell 函数。由于函数在当前 shell 的上下文中运行,因此它们可以修改其状态,包括其 env var。

解决方案 2:将STATE值存储在用户主目录中的点文件等位置。

最新更新