2013-12-16 2 views
0

Я делаю remsh на сервере и читаю содержимое файла в цикле for. Файл содержит путь к каталогу, и его имя содержит переменную env.UNIX: невозможно получить значение переменной env

Содержимое файла указано ниже. ENV_VARIABLE содержит некоторый путь к каталогу.

$ENV_VARIABLE/somepath 

Я запускаю команду, как показано ниже.

remsh server -l user ' . ./.profile;echo $ENV_VARIABLE for i in `cat filename do; echo $i;done' 

Когда команда выше выполнена, она производит ниже выход.

VALUE_OF_ENV_VARIABLE/somepath 
    $ENV_VARIABLE/somepath 

Почему ENV_VARIABLE чтение из файла в не заменяется это значение в то время как тот же ENV_VARIABLE заменяется его значение с «Эхо»?

Как я могу получить значение ENV_VARIABLE, когда он считывается из файла?

+0

является ENV_VARIABLE в удаленном ./.profile? или на одном из вызывающего сервера (то есть локальном)? если удаленный: 'remsh server -l user '. ./.profile; echo "ENV_VARIABLE = $ ENV_VARIABLE"; для i в $ (имя файла cat); do echo "$ i"; сделано ". Если локально: 'remsh server -l user './.profile; echo' ENV_VARIABLE = $ ENV_VARIABLE ', для i в $ (имя файла cat), do echo \" \ $ i \ "; done" (я предполагаю, filename "и" .profile ", чтобы оба были удалены) –

+0

Да, он определен на удаленном сервере, и я могу напечатать его значение с помощью echo $ ENV_VARIABLE, запустив сервер remsh -l user '. ./.profile;echo $ ENV_VARIABLE '. Но когда я пытаюсь напечатать его значение, читая его из файла, он дает мне ENV_VARIABLE вместо его значения. – Jitu

ответ

0

После прочтения ваших комментариев стало очевидно, что проблема заключается в cat filename, который просто создает необработанное содержимое файла без интерполяции. Вам нужно использовать eval на этом выходе, если вы хотите сделать замену переменных.

Так, что я думаю что вы хотите:

remsh server -l user ' . ./.profile;echo $ENV_VARIABLE; for i in `cat filename` ; do eval echo $i ; done' 

Примечание eval перед использованием переменной, полученной из файла

+0

Он определен в удаленной оболочке, и я могу напечатать его значение с помощью echo $ ENV_VARIABLE. Файл также содержит одну и ту же переменную, но когда я пытаюсь напечатать его значение через echo, это дает мне ENV_VARIABLE не значение. – Jitu

+0

, потому что вы просто используете 'cat' для вывода файла, это не интерполирует переменные. – Donovan

Смежные вопросы