导出环境变量 bash
Exporting environmental variables 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 的上下文中,它们可以修改其状态,包括其环境变量。
解决方案 2:将 STATE
值存储在用户主目录中的某个位置,例如点文件。
我正在尝试创建一个 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 的上下文中,它们可以修改其状态,包括其环境变量。
解决方案 2:将 STATE
值存储在用户主目录中的某个位置,例如点文件。