导出环境变量

时间:2018-08-14 15:44:05

标签: bash shell environment-variables toggle

我试图创建一个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通话似乎不持久

1 个答案:

答案 0 :(得分:0)

您的脚本作为当前shell的子级运行。子进程不能直接修改其父级的环境。其中包括环境变量,当前工作目录,信号处理方式等。一个进程只能修改其环境,也可以隐式修改它启动的任何进程的环境。

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

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

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