【问题标题】:output from script into environment variables, bash从脚本输出到环境变量,bash
【发布时间】:2015-07-24 03:04:32
【问题描述】:

我有一个脚本输出:

TAGS    Name    i-1c69afe325    instance    INSTANCE_NAME

我想用“Name”和“INSTANCE_NAME”来做一个环境变量。

我尝试了很多东西,最后一个是:

./test2.sh | awk '{system("export "$2"="$5)}'

它没有出错,但我没有任何环境变量。

有什么想法吗?

PS:如果它很重要,我会在每次实例启动时尝试将我的 ec2-tags 转换为环境变量。

非常感谢您的帮助

【问题讨论】:

  • 该 awk 尝试的问题在于,虽然这可能已经在 system 启动的 shell 中设置了变量,但对运行 awk 脚本的 shell 没有任何影响(因为子进程不能在父进程中设置变量)。

标签: bash awk export environment-variables


【解决方案1】:

使用您可以在Bash FAQ 001 上找到的信息,您可以得出以下结论:

while IFS= read -r tags name i_var instance instance_name; do
  declare "$name"="$instance_name"
done < <(./test2.sh)

或最近的 bash

while IFS= read -r tags name i_var instance instance_name; do
  printf -v "$name" %s "$instance_name"
done < <(./test2.sh)

【讨论】:

  • 我想声明一些“系统范围”的东西,不仅在执行范围内。
  • 定义“系统范围”。这个答案定义了当前 shell 会话的变量。您可以将export "$name" 添加到这些循环中,以导出从此shell 运行的子进程的变量。如果您的意思是希望该值在该系统上的所有外壳(或进程)中持续存在,那么您必须将其设置在适当的系统位置(如果该值需要是动态的,那么您可以执行类似这些循环的操作那里)。
猜你喜欢
  • 1970-01-01
  • 2016-10-07
  • 2021-10-03
  • 1970-01-01
  • 2012-03-01
  • 2017-12-25
  • 2012-10-26
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多