【问题标题】:ReExporting a variable to the environment from a bash script从 bash 脚本将变量重新导出到环境
【发布时间】:2014-06-11 23:00:08
【问题描述】:

我有以下 bash 脚本。

export KEY=A
run_command_that_uses_KEY
...
export KEY=B
run_command_that_uses_KEY

export 将变量分配导出到子 shell,即作为包含 export 指令的 shell 的子进程启动的 shell。命令行环境是脚本外壳的父级,所以它看不到变量赋值。如何强制父 shell 导出正确的密钥?我可以在 bash 脚本本身中获取 bash 脚本吗?

【问题讨论】:

  • 当您进入“我如何强制使用父外壳...”时,您似乎正在急转直下。你想做什么?
  • 第二个 run_command_that_uses_KEY 仍然得到 A 而不是 B。
  • 你确定这是怎么回事吗?应该是B。其实你只需要第一次使用export;之后,shell 知道它已导出,并且更改将被导出。

标签: linux bash shell unix


【解决方案1】:

这不是您的变量未导出的问题。您可以从bash 端轻松验证这是否正常工作:

export KEY=A
bash -c 'echo $KEY'
export KEY=B
bash -c 'echo $KEY'

您的问题更可能是您的程序是单实例。

如果您使用firefoxgedit 尝试上述方法,您会发现变量第一次有效,但第二次无效。

这是因为第一次,程序从头开始,而第二次,它只是向旧进程发送消息以打开一个新窗口。

您可以在再次调用之前尝试杀死与该任务相关的所有进程。

【讨论】:

  • 就是 run_command_that_uses_KEY 仍然是 B,但 env KEY 是 B,之前就杀死了它,并且有效。
猜你喜欢
  • 2015-07-24
  • 2012-10-26
  • 1970-01-01
  • 2017-12-25
  • 2021-07-11
  • 1970-01-01
  • 2022-01-17
  • 2016-10-07
  • 1970-01-01
相关资源
最近更新 更多