2012-03-09 64 views
1

基本上我有一個需要從外部文件中設置的環境變量列表。這裏就是我試圖做...如何從源文件中導入外部文件的環境變量

文件:在/ usr /本地/ env的

文件:/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

所以我檢查的變量,並注意當:

[[email protected] ~]# 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' 

,當我運行:

[[email protected] ~]# 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 

爲什麼源包$ '<變量> \ R' 周圍的一切我的價值觀?我想這就是爲什麼我得到錯誤。任何人有任何幫助?

+2

因爲您在基於Windows的機器上創建了您的文件?嘗試運行'dos2unix/usr/local/env'。祝你好運。 – shellter 2012-03-09 00:15:51

+0

看起來像不正確的行尾字符。你的'/ usr/local/env'是否來自Windows? – ayoy 2012-03-09 00:17:50

回答

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線路終端的選項。

+0

謝謝,是的,我在Windows中創建文件。我已經運行了dos2unix命令,但該文件實際上是在一個子目錄中,並且該命令沒有在子目錄上遞歸運行。謝謝! – bwight 2012-03-09 14:09:37

1

您需要在您的/usr/local/env運行dos2unix:現在它使用的是Windows行結束(回車+換行,\r\n),而不是Linux的那些(只是換行,\n)。

此外,東西似乎是防止波浪擴張;我不確定這個問題到底是—,據我所知,Bash參考手冊沒有列出任何東西,它會完全關閉它—但你很有可能通過編寫$HOME來解決它,而不是~。 : -/