注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

态度决定高度

英语,沟通,rhca,管理

 
 
 

日志

 
 

[Bash Shell 程序设计]当while read 遇上ssh  

2011-03-01 10:18:26|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
先看一段简化过的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……(几乎所有支持流文本处理的命令都包含在内)
  评论这张
 
阅读(618)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018