2012-06-30 3 views
5

Я пытаюсь написать сценарий для входа на несколько удаленных серверов и выполнить скрипт на каждом сервере. Однако, я хотел бы передать переменную через ssh. Что-то вроде этого:Передача переменных через ssh

var="/home/dir/" 

    ssh -T $mchname <<'ENDSSH'  
    $var"run_script" <input> output &  
ENDSSH 

Эта наивная попытка не работает ($ var просто null). Какой был бы правильный синтаксис? Заранее спасибо.

ответ

4

Удалите котировки от ENDSSH. Они предотвращают расширение переменных в пределах here document.

+0

Хорошо, это работает. Но теперь элемент управления просто возвращается к главному сценарию, как только «run_script» завершается в $ mchname (хотя я использую «&»), чего я не хочу. Как я могу это исправить? Извините за основные вопросы. Если вы захотите, вы можете указать мне на какой-то учебник по ssh, где я могу это разобраться. Благодарю. – user1477337

+0

@ user1477337: Амперсанд действует на конечной машине и просто означает, что управление возвращается к основному скрипту быстрее, так как ему не нужно ждать завершения 'run_script'. Но поскольку после команды 'ssh' и ее документа здесь ничего нет, главный скрипт должен выйти, как только соединение' ssh' будет закрыто, что должно быть почти сразу. Однако, если есть какая-то причина, в которой вы нуждаетесь, вы можете попробовать префикс 'exec' для команды' ssh': 'exec ssh ...' Все это связано с оболочкой и в основном не относится к 'ssh'. –

2

Попробуйте это:

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH 
Смежные вопросы