【问题标题】:Running a Block of Shell Script remotely using SSH使用 SSH 远程运行一段 Shell 脚本
【发布时间】:2014-02-11 23:04:09
【问题描述】:

我正在尝试使用 shell 脚本在不同的服务器上执行命令块

谁能帮我解决这个问题

while [ $RecordCount -gt 0 ]
do
  expXXXXX=`sed -n ${RecordCount}p ${GUID_DLT_EXPR_FILE} | cut -d "|" -f1`
  exprXXXXXn_id=`sed -n ${RecordCount}p ${GUID_DLT_EXPR_FILE} | cut -d'|' -f2`
  run_dt=`sed -n ${RecordCount}p ${GUID_DLT_EXPR_FILE} | cut -d'|' -f3`

  #START OF THE BLOCK - IN SERVER 2   

  if [ -d "/sas/ADH/exXd_$expXXXXX" ]; then
    if [ -d "/sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id" ]; then
      mv -f /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id/latest/* \
        /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id/archives
    else    
      mkdir /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id
      mkdir /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id/latest
      mkdir /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id/archives
    fi
  else 
    mkdir /sas/ADH/exXd_$expXXXXX
    mkdir /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id
    mkdir /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id/latest
    mkdir /sas/ADH/exXd_$expXXXXX/version_$exprXXXXXn_id/archives
  fi

  #END OF THE BLOCK - IN SERVER 2

done

exit 0

【问题讨论】:

    标签: shell ksh


    【解决方案1】:

    只需将这些命令流式传输到 ssh 标准输入,例如:

    ssh remoteserver << EOF
    command1
    command2
    command3
    ...
    EOF
    

    &lt;&lt; 在这里表示here-doc - 多行引号。

    【讨论】:

    • 我尝试了以下选项,但出现“不适当的 ioctl dor 设备”错误。 (ssh -t -t 远程服务器
    • @user3299344 重定向标准输入时,不要将-t 选项组合用于 ssh。试试ssh ${REMOTE_SERVER:?} echo ok。如果失败,则远程帐户的环境存在问题,例如 shell 初始化期间的 stty 命令。
    【解决方案2】:

    这基本上可以满足您的要求:

    while [[ $RecordCount -gt 0 ]]
    do
      field1=$( sed -n ${RecordCount}p ${GUID_DLT_EXPR_FILE} | cut -d'|' -f1 )
      field2=$( sed -n ${RecordCount}p ${GUID_DLT_EXPR_FILE} | cut -d'|' -f2 )
      run_dt=$( sed -n ${RecordCount}p ${GUID_DLT_EXPR_FILE} | cut -d'|' -f3 )
    
    
      dir="/sas/ADH/exXd_${field1}"
      id_path="$dir/version_${field2}
      latest="$id_path/latest"
      archives="id_path/archives"
    
      ssh ${REMOTE_SERVER:?} "if [[ -d $id_path ]] &&
          ls -d $latest/* > /dev/null 2>& 1
        then
          mv -f $latest/* $archives
        else
          mkdir -p $latest $archives
        fi"
    
      update_recordcount
    
    done
    
    exit 0
    

    顺便说一句,您需要提供自己的版本:

    • REMOTE_SERVER(变量)
    • update_recordcount(函数)——确保它以某种方式倒计时到零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多