我试图创建一个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
通话似乎不持久
答案 0 :(得分:0)
您的脚本作为当前shell的子级运行。子进程不能直接修改其父级的环境。其中包括环境变量,当前工作目录,信号处理方式等。一个进程只能修改其环境,也可以隐式修改它启动的任何进程的环境。
脚本中的export
可以正常工作。但它只会修改该脚本或它生成的任何子进程(例如其他脚本)的值。根据定义,它不能在其父进程中更改值。
解决方案1:将脚本实现为shell函数。由于函数在当前Shell的上下文中运行,因此它们可以修改其状态,包括其环境变量。
解决方案2:将STATE
值存储在用户主目录中的类似点文件的位置。