SSH连接Bash后运行一段代码

时间:2013-07-16 14:44:47

标签: bash ssh

在ssh到服务器后,如何远程运行脚本中的代码块?不确定它是否可能。

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

1 个答案:

答案 0 :(得分:2)

您可以使用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