Как импортировать переменные среды из внешнего файла с использованием исходного кода - PullRequest
1 голос
/ 09 марта 2012

В основном у меня есть список переменных среды, которые мне нужно установить из внешнего файла. Вот что я пытаюсь сделать ...

файл: / 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

Почему источник оборачивает $ ' \ r' вокруг всех моих значений? Я думаю, именно поэтому я получаю ошибку. Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 09 марта 2012

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 завершение строки.

1 голос
/ 09 марта 2012

Вам нужно запустить dos2unix на вашем /usr/local/env: сейчас он использует окончания строки Windows (возврат каретки + перевод строки, \r\n) вместо Linux (просто перевод строки, \n) ).

Кроме того, что-то, кажется, препятствует расширению тильды; Я не уверен, в чем проблема с & mdash; насколько я вижу, в справочном руководстве по Bash ничего нет , которое могло бы полностью его отключить & mdash; но вы, скорее всего, можете обойти это, написав $HOME вместо ~. : - /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...