歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> [Bash Shell程序設計]當while read遇上ssh

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

日期:2017/3/1 15:27:52   编辑:SHELL編程
[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