Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用源从外部文件导入环境变量_Linux_Bash_Amazon Ec2_Environment Variables - Fatal编程技术网

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

Linux 如何使用源从外部文件导入环境变量,linux,bash,amazon-ec2,environment-variables,Linux,Bash,Amazon Ec2,Environment Variables,基本上,我有一个环境变量列表,需要从外部文件中设置。这就是我想做的 文件:/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/jv

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

文件:/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:没有这样的文件或目录BE实例:第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'环绕在我的所有值上?我想这就是我出错的原因。有人需要帮助吗?

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


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

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

export EC2\u PRIVATE\u KEY=~/.EC2/pk-xxxxx.pem\r\n

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

你可以把它剥掉

dos2unix/usr/local/env


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

因为您是在基于Windows的计算机上创建文件的?尝试运行
dos2unix/usr/local/env
。祝你好运。看起来行尾字符不正确。您的
/usr/local/env
是否来自Windows?谢谢,是的,我在Windows中创建了该文件。我已经运行了dos2unix命令,但该文件实际上位于子目录中,并且该命令没有在子目录上递归运行。谢谢