基本上我有一个环境变量列表,我需要从外部文件设置。这就是我想要做的......
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'围绕我的所有值?我想这就是我收到错误的原因。有人有任何帮助吗?
答案 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
行终止保存的选项。