【问题标题】:Exporting environmental variables bash导出环境变量 bash
【发布时间】:2018-08-14 15:44:05
【问题描述】:

我正在尝试创建一个 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 调用似乎不是持久的

【问题讨论】:

  • 不是;您不能从子进程修改进程的环境。

标签: bash shell environment-variables toggle


【解决方案1】:

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

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

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

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

【讨论】:

猜你喜欢
  • 2015-09-18
  • 2021-04-18
  • 2017-09-15
  • 2011-05-31
  • 1970-01-01
  • 2021-10-03
  • 2014-03-23
  • 2012-10-26
  • 2013-03-28
相关资源
最近更新 更多