歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

[Bash Shell程序設計]當while read遇上ssh

[Bash Shell程序設計]當while read遇上ssh   先看一段簡化過的BASH SHELL代碼    TODAY=`date +%Y%m%d`  SUFFIX="tar"  CONF=the_config_file  i=0    while read HOST SRCPATH DSTPATH  do          (( i++ ))          if [ "X${HOST:0:1}" = "X#" -o ${#DSTPATH} -eq 0 ]          then                  #忽略注釋行及少於3個項的記錄          else                  ssh ${HOST} "tar c ${SRCPATH}" >${DSTPATH}.${TODAY}.${SUFFIX} 2>/dev/null          fi  done < $CONF    作者的本意是通過腳本讀取配置文件$CONF,然後打包備份$CONF中指定的文件,但執行後發現程序在成功備份$CONF中指定的第一個文件後即退出……    跟蹤後發現read在備份完第一個文件後就再讀不到任何數據,所以while循環結束--也就是說,  通過重定向$CONF文件傳給標准輸入的數據被    ssh ${HOST} "tar c ${SRCPATH}" >${DSTPATH}.${TODAY}.${SUFFIX} 2>/dev/null    這個命令提前吃掉了。    將其改為  ssh ${HOST} "tar c ${SRCPATH}" >${DSTPATH}.${TODAY}.${SUFFIX} 2>/dev/null </dev/null    將ssh的標准輸入重定向到/dev/null,程序正常備份所有$CONF中指定的文件。    --------------------------------------------------------  結論:    while read時,要注意那些處理標准輸入的命令,例如    cat,mail,ssh,grep,sed,tr,awk……(幾乎所有支持流文本處理的命令都包含在內)  
Copyright © Linux教程網 All Rights Reserved