2013-07-16 3 views
0

После того как я ssh на сервере, как я могу запустить блок кода из моего сценария удаленно? Не уверен, возможно ли это.Запустить блок кода после подключения SSH Bash

ssh "$server" #SSH login 
echo Connected to "$serverName" 
exec < filelist.txt 
while read updatedfile oldfile; do 
    # echo updatedfile = $updatedfile #use for troubleshooting 
    # echo oldfile = $oldfile #use for troubleshooting 
    if [[ ! $updatedfile =~ [^[:space:]] ]] ; then #empty line exception 
     continue # empty line exception 
    fi 
    if [[ ! $oldfile =~ [^[:space:]] ]] ; then #empty line exception 
    continue # empty line exception 
    fi 
    echo Comparing $updatedfile with $oldfile 
    if diff "$updatedfile" "$oldfile" >/dev/null ; then 
     echo The files compared are the same. No changes were made. 
    else 
     echo The files compared are different. 
     cp -f -v $oldfile /infanass/dev/admin/backup/`uname -n`_${oldfile##*/}_$(date +%F-%T) 
     cp -f -v $updatedfile $oldfile 
    fi 
done 
+0

возможно дубликат [команд SSH через Баш скрипт] (http://stackoverflow.com/questions/4225652/ssh-commands-via-bash-script) – devnull

+1

вопрос также спросили о [UNIX и Linux] (HTTP: //unix.stackexchange.com/q/83228/4667) –

+0

Возможный дубликат [Что является самым чистым способом для SSH и запуска нескольких команд в Bash?] (http://stackoverflow.com/questions/4412238/whats-the- cleanest-to-ssh-and-run-multiple-commands-in-bash) – mnagel

ответ

1

Вы делаете это, используя here-document (непроверенный ниже). Имейте в виду, что вам придется избегать переменных, определенных на сервере ssh.

ssh $server <<ENDSSH 
echo Connected to "$serverName" 
exec < filelist.txt 
while read updatedfile oldfile; do 
# echo updatedfile = $updatedfile #use for troubleshooting 
# echo oldfile = $oldfile #use for troubleshooting 
      if [[ ! $updatedfile =~ [^[:space:]] ]] ; then #empty line exception 
      continue # empty line exception 
      fi 
      if [[ ! $oldfile =~ [^[:space:]] ]] ; then #empty line exception 
      continue # empty line exception 
      fi 
     echo Comparing $updatedfile with $oldfile 
     if diff "$updatedfile" "$oldfile" >/dev/null ; then 
      echo The files compared are the same. No changes were made. 
     else 
      echo The files compared are different. 
      cp -f -v $oldfile /infanass/dev/admin/backup/`uname -n`_${oldfile##*/}_$(date +%F-%T) 
      cp -f -v $updatedfile $oldfile 
     fi   
done 
ENDSSH 
+0

Я продолжаю получать эту ошибку ../ test.bsh: строка 3: синтаксическая ошибка в строке 24: '<< 'не имеет аналогов Это не нравится << ENDSSH – mkrouse

+0

@mkrouse Положите последнюю 'ENDSSH' на свою линку и убедитесь, что перед или после нее нет символов. –

+0

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

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