在写一个scp推送文件脚本的时候遇到的问题
脚本
# cat test.sh #!/bin/bash IP=`head -1 hosts.txt|tail -1|awk -F" " '{print $1}'` PORT=`head -1 hosts.txt|tail -1|awk -F" " '{print $2}'` scp -P ${PORT} -r $1 ${IP}:/tmp
执行结果
# sh test.sh /tmp/yum.log 'ad port '22 lost connection
hosts.txt文件内容
# cat hosts.txt 192.168.0.103 22
原因分析
开启shell调试选项,执行结果如下
# sh -x test.sh /tmp/yum.log ++ awk '-F ' '{print $1}' ++ tail -1 ++ head -1 hosts.txt + IP=192.168.0.103 ++ awk '-F ' '{print $2}' ++ tail -1 ++ head -1 hosts.txt + PORT=$'22\r' + scp -P $'22\r' -r /tmp/yum.log 192.168.0.103:/tmp yum.log 'ad port '22 lost connection
奇怪为什么会PORT=$'22\r',百度$'\r'遇到这种问题还不少,\r是windows的换行符,问题可能出在这里hosts.tx文件是我从windows下写的,而后上传到linux;由于$2是最后一个字段所以$2包含了\r
解决办法
方法一:在hosts.txt文件内容的每一行后添加一个空格
方法二:安装dos2unix
# yum install dos2unix -y ... # dos2unix hosts.txt dos2unix: converting file hosts.txt to UNIX format ...
再次执行脚本成功
# sh -x test.sh /tmp/yum.log ++ awk '-F ' '{print $1}' ++ tail -1 ++ head -1 hosts.txt + IP=192.168.0.103 ++ awk '-F ' '{print $2}' ++ tail -1 ++ head -1 hosts.txt + PORT=22 + scp -P 22 -r /tmp/yum.log 192.168.0.103:/tmp yum.log
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。