2016-06-30 3 views
0

Как захватить вывод удаленной команды в сценарии bash. НапримерСбор вывода удаленной команды ssh в переменной

ssh [email protected]$SUT<<EOD 
COUNT=$(ls -la | wc -l) 
EOD 

Планирование это для большего сценария с несколькими таких случаях, когда мне нужно хранить и использовать вывод удаленных команд.

ответ

2

Оно должно быть:

VAR=$(ssh "$USERNAME"@"$HOST" -- remote_command -option) 

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

Если вы хотите выполнить многострочную команду удаленно использовать следующий построить с здесь документом:

VAR=$(ssh "$USERNAME"@"$HOST" <<EOF 
    remote_command -option 
    another_command 
    ... 
EOF 
) 

Btw, если вы не хотите интерполировать локальные переменные в удаленную команду, вы, вероятно, хотите, чтобы отключить локальную оболочку разложения в здесь документ, используя <<'EOF' как стартовый разделитель (обратите внимание на '):

VAR=$(ssh "$USERNAME"@"$HOST" <<'EOF' 
    remote_command -option 
    another_command 
    ... 
EOF 
) 

в приведенной выше форме, вы можете использовать переменные оболочки, команды подстановки и т.д. в удаленном скрипте. Как это:

VAR=$(ssh "$USERNAME"@"$HOST" <<'EOF' 
    COUNT=$(remote_command -option) 
    another_command "${COUNT}" 
    if $((COUNT+1)) ; then 
     foo -bar 
    fi 
    ... and so on. all expansions happen remotely 
EOF 
) 
+0

хотел использовать этот формат, как между первой и последней строке я планирую написать большую логику, нужно выполнить на удаленной машине – chozhan

+0

SSH $ USERNAME @ $ SUT << EOD COUNT = $ (ls -la | wc -l) , если [$ COUNT -eq 4]; затем remote_command2 fi EOD Планирование сделать что-то подобное. Интересно, если это возможно – chozhan

+0

Используйте последнюю версию с '<< 'EOF'' в таком случае – hek2mgl

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