如何使用source从外部文件导入环境变量

时间:2012-03-09 00:13:30

标签: linux bash amazon-ec2 environment-variables

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

file:/ 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

file:/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

为什么源包围$'< variable> \ r'围绕我的所有值?我想这就是我收到错误的原因。有人有任何帮助吗?

2 个答案:

答案 0 :(得分:1)

您需要在dos2unix上运行/usr/local/env:现在它正在使用Windows行尾(回车+换行,\r\n)而不是Linux行({line} -feed,\n)。

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

答案 1 :(得分: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行终止保存的选项。