0

我正在尝试将 .ksh 脚本中的 kermit 命令行切换为使用 lftp。我很难将这条线分开来确定它的作用以及如何让它切换到使用 lftp。请参阅下面的 #this 行进行切换。希望我包含了足够多的脚本。

.ksh 脚本的摘录:

  if [[ "$SKIP_FTP" == "N" ]]; then
    export M_SCRIPT_TMP_FILE=$TMP/m_Ftp.tmp.$$
    print "ftp open $M_FTP_SITE /USER:${M_FTP_USER} /PASSWORD:${M_FTP_PASS}" >$M_SCRIPT_TMP_FILE
    print "LOG TRANSACTIONS $TMP/m_Ftp_trans.tmp" >> $M_SCRIPT_TMP_FILE
    cat - | sed -e 's/ *--.*//' -e 's/ *#-.*//' >> $M_SCRIPT_TMP_FILE
    if [[ "${M_TTY:-none}" != "none" ]]; then
      exec 3<$M_TTY
      exec <&3
    fi

    export M_PROMPT_MSG="[enter '?' to see the ftp script to be run] "
    if ckCmd; then
      # Run kermit ftp script from stdin
      cat <(print "  Ftp script:") $M_SCRIPT_TMP_FILE <(print "  Ftp dialog:") \
        | sed -e 's/PASSWORD:.*/PASSWORD:/' -e 's/^/         /' >> ${LOGFILE:-$M_HOME/logs/default.log}
      kermit $M_SCRIPT_TMP_FILE | sed -e '/^$/d' -e 's/^/         /' >> ${LOGFILE:-$M_HOME/logs/default.log} 2>&1  #this line to switch from kermit to lftp - how
      cat <(print "  Ftp transaction log:") $TMP/m_Ftp_trans.tmp \
        | sed -e '/^$/d' -e 's/^/         /' >> ${LOGFILE:-$M_HOME/logs/default.log} 2>&1
      rm -f $M_SCRIPT_TMP_FILE $TMP/m_Ftp_trans.tmp >/dev/null 2>&1 # Note password stored (briefly) in tmp file
    fi
  fi

如果有人有更多关于 kermit 线的作用以及如何将其切换到 lftp 的信息,那将不胜感激。我试过用谷歌搜索 kermit 示例和 lftp 示例,但没有找到类似的示例。

更新 - 例如,导出这是做什么的?M_SCRIPT_TMP_FILE=$TMP/m_Ftp.tmp.$$

sed -e '/^$/d' -e 's/^/ /' 我发现sed怎么样

'/^$/d' - 找到任何空行(起点和终点相同,例如没有字符),然后删除它们。

s 命令's/^/ /'- 's/regexp/replacement/flags'。它的基本概念很简单:s 命令尝试将模式空间与提供的正则表达式 regexp 进行匹配;如果匹配成功,则匹配的那部分模式空间被替换替换。那么,也许用空格替换空行?

我真的不确定 kermit 命令,但看起来无论返回什么都会删除它的空行。

4

0 回答 0