我在使用nc进行文件传输的奇怪情况上苦苦挣扎很长时间,我使用以下bash脚本将文件从A机器传输到B机器,脚本似乎没问题,文件正在传输到B机器,但是文件的大小是0字节,没有任何内容(它真的包含在机器A中),然后我第二次运行我的脚本,这次机器B确实包含内容,我可以知道我的脚本导致这个问题的哪一部分?百万感谢您的帮助!
#!/bin/bash
IPADDRSTR="$1"
COUNT=0
for x in $IPADDRSTR
do
#server
IPERRSTR[$COUNT]=$(sshpass -p pass ssh -o StrictHostKeyChecking=no -p 22 root@$x '$(/usr/bin/nc -l -p1234 > /root/a.txt)&' > /dev/null 2>&1 | echo -n $?)
if [ ${IPERRSTR[COUNT]} -eq "0" ]
then
nc $x 1234 < ./a.txt
echo "done"
fi
COUNT=$((COUNT+1))
done
答案 0 :(得分:0)
rsync在这里可能是更优雅的实用程序。我只是想让你开始。你的代码对我来说似乎没问题,但他们在上面提出了很好的观点。在这里阅读rsync:https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps
#!/bin/bash
IPADDRSTR="$1"
COUNT=0
for x in $IPADDRSTR
do
#server
IPERRSTR[$COUNT]=$(sshpass -p pass ssh -o StrictHostKeyChecking=no -p 22 root@$x '$(/usr/bin/nc -l -p1234 > /root/a.txt)&' > /dev/null 2>&1 | echo -n $?)
if [ ${IPERRSTR[COUNT]} -eq "0" ]
then
#######Place rysnc command here instead.########
echo "done"
fi
COUNT=$((COUNT+1))
done
答案 1 :(得分:0)
感谢所有人,我想我已经解决了问题,这是原因和解决方案
传输文件为0字节的原因是传输甚至没有启动!由于nc客户端在nc监听之后立即被调用,因此nc客户端有可能比监听过程更快地启动,因此我尝试在nc -l命令之后的某个时间(~1s)休眠以确保监听过程在客户端开始之前启动,然后一切正常。
感谢大家的回复!