【问题标题】:not able to change environment variable value from shell script [duplicate]无法从 shell 脚本更改环境变量值 [重复]
【发布时间】:2021-07-25 03:56:54
【问题描述】:

我在.zshrc 中导出了一个环境变量,我想从/bin/script.sh 中的脚本更新它

#!/bin/sh
if [ $TOGGLE -eq 1 ]; then
echo a;
else 
echo b;
fi

TOGGLE=$((TOGGLE * -1));

但是在运行脚本之后,TOGGLE 的值在我运行脚本的会话中没有改变。 我怎样才能强迫它改变

【问题讨论】:

  • mywiki.wooledge.org/BashFAQ/060zsh 不是bash jfyi。
  • @RootOfMinusOne :您忘了说如何运行脚本。如果您以source .../script.sh 执行它(但我希望您没有真正将它存储在/bin 中,正如您的问题所暗示的那样),您应该看到变量TOGGLE。除此之外,它不是环境变量,而且您确实没有以任何方式导出某些内容。

标签: linux shell environment-variables zsh


【解决方案1】:

这是一个常见问题解答。环境变量对每个进程都是私有的,而不是全局的。您的脚本作为一个单独的进程运行,因此无法直接操作其父进程的环境变量。您可以source 脚本,这将导致它在当前shell 进程而不是子shell 中执行。但是,这可能会对当前 shell 的状态产生不希望的副作用。

【讨论】:

  • 我在. zshrc 中创建了一个函数并将脚本放入其中。