2014-02-24 2 views
2

Я создаю удаленную переменную, значение которой я хочу присвоить локальной переменной в unix. Вот код #!/Bin/БашНазначение значения удаленной переменной локальной переменной в unix/linux

INPUT= "test" 
ssh [email protected] 
"if [ -s $INPUT ]; 
then 
    date=\`date\` 
    remote= $INPUT.date 
    $INPUT= \$remote 
else 
    mkdir $INPUT 
fi" 

В основном я присвоить значение локальной переменной. После ssh на удаленный сервер, я проверяю, существует ли непустая директория по имени «тест». Если это так, то я добавляю отметку времени к локальной переменной $ INPUT. Код работает нормально до строки 8 «remote = $ INPUT.date». Но присваивание удаленной переменной \ $ remote локальной переменной $ INPUT не выполняется. Что я делаю не так. Спасибо за помощь.

+0

Я не думаю, удаленная оболочка может изменить переменные локальной оболочки, нет. Вместо этого сценарий, который вы запускаете удаленно, может, например, напечатайте значение $ remote или ничего, и вы можете, например, захватить это в переменную локально с backticks, а затем использовать это для условного обновления INPUT? – Rup

+0

Итак, как мне это сделать? Экспортировать удалённую переменную в файл локально? Я попробовал «cat \ $ remote> file.txt», но file.txt создается на удаленном сервере, так как весь код («if .... fi») работает на сервере. – user45270

ответ

4

Как сказал Руп, удаленная оболочка не может установить локальные переменные оболочки. Вам нужно захватить удалённую переменную, распечатав ее и используя подстановку команд. Эта команда SSH будет делать то, что вы пытаетесь сделать, то это будет эхо измененное значение, которое вы хотите сохранить в $ ВХОД:

INPUT="test" 
ssh [email protected] "if [ -s $INPUT ]; then 
timestamp=\$(date) 
echo "${INPUT}.\${timestamp}" 
fi" 

Выход:

test.Monday, 24 February 2014 11:26:41 GMT 

Если вы хотите $ ВХОДА быть измененный, то вы должны использовать команду всего SSH в качестве подстановки команд:

INPUT="test" 
INPUT=$(ssh [email protected] "if [ -s $INPUT ]; then 
timestamp=\$(date) 
echo "${INPUT}.\${timestamp}" 
fi") 

Выход:

$> echo $INPUT 
test.Monday, 24 February 2014 11:27:47 GMT 

Точно так же, если вы хотите сохранить переменную в текстовом файле, это будет хранить на удаленном хосте:

ssh [email protected] "echo \$remote > file.txt" 

Это будет хранить его на месте:

ssh [email protected] "echo \$remote" > file.txt 
Смежные вопросы