【问题标题】:How to import environmental variables form external file using source如何使用源从外部文件导入环境变量
【发布时间】:2015-08-28 11:46:13
【问题描述】:

基本上,我有一个需要从外部文件设置的环境变量列表。这就是我想要做的......

文件:/usr/local/env

export EC2_PRIVATE_KEY=~/.ec2/pk-xxxxx.pem
export EC2_CERT=~/.ec2/cert-xxxxx.pem
export EC2_URL=https://ec2.us-east-1.amazonaws.com
export EC2_HOME=/opt/aws/apitools/ec2
export JAVA_HOME=/usr/lib/jvm/jre

文件:/usr/local/test.sh

source /usr/local/env
ec2-describe-instances

当我运行/usr/local/test.sh 时,我得到/bin/ec2-cmd: No such file or directorybe-instances: line 11: /opt/aws/apitools/ec2

所以我检查了变量并注意到什么时候:

[root@ip-10-244-17-106 ~]# set | grep EC2
EC2_AMITOOL_HOME=/opt/aws/amitools/ec2
EC2_CERT=$'~/.ec2/cert-xxxxx.pem\r'
EC2_HOME=$'/opt/aws/apitools/ec2\r'
EC2_PRIVATE_KEY=$'~/.ec2/pk-xxxxx.pem\r'

当我跑步时:

[root@ip-10-244-17-106 ~]# env | grep EC2
EC2_HOME=/opt/aws/apitools/ec2
EC2_URL=https://ec2.us-east-1.amazonaws.com
EC2_PRIVATE_KEY=~/.ec2/pk-xxxxx.pem
EC2_CERT=~/.ec2/cert-xxxxx.pem

为什么 source 将 $'\r' 包裹在我的所有值周围?我认为这就是我收到错误的原因。有人帮忙吗?

【问题讨论】:

  • 因为您是在基于 Windows 的机器上创建文件的?尝试运行 dos2unix /usr/local/env 。祝你好运。
  • 看起来行尾字符不正确。您的/usr/local/env 是否来自 Windows?

标签: linux bash amazon-ec2 environment-variables


【解决方案1】:

Unix 以换行符结束一行,通常用 C 转义约定描述为 \n。 Windows 用回车符和换行符或\r\n 终止一行。因此,源文件中的实际第一行是

export EC2_PRIVATE_KEY=~/.ec2/pk-xxxxx.pem\r\n

Unix 知道将\n 识别为行尾,但认为\r 只是该行的更多文本。

你可以去掉它

dos2unix /usr/local/env

此外,Windows 上的一些文本编辑器还提供使用\n 行终止符保存的选项。

【讨论】:

  • 谢谢,是的,我在 Windows 中创建了文件。我已经运行了 dos2unix 命令,但该文件实际上位于子目录中,并且该命令没有在子目录上递归运行。谢谢!
【解决方案2】:

你需要在你的 /usr/local/env 上运行 dos2unix:现在它使用 Windows 换行符(回车 + 换行符,\r\n)而不是 Linux 换行符(只是换行符,\n )。

此外,似乎有些东西阻止了波浪号的扩展;我不确定这是什么问题——据我所知,Bash 参考手册没有列出 任何可以完全关闭它的东西——但你很可能可以解决它通过写$HOME 而不是~。 :-/

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 2019-09-24
    • 2020-03-22
    • 2017-10-10
    • 2021-10-09
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多