2014-09-19 27 views
0

我在使用nc傳輸文件時奇怪的情況很長時間,我使用下面的bash腳本將文件從A機器傳輸到B機器,腳本似乎沒問題,文件正在傳輸到B機器,但是文件的大小爲0字節並且沒有任何內容(它真的包含在機器A中),那麼我第二次運行我的腳本,這時機器B確實包含內容,我可以知道哪個部分我的腳本導致這個問題?百萬感謝您的幫助!使用nc傳輸文件時的空文件

#!/bin/bash 
IPADDRSTR="$1" 
COUNT=0 
for x in $IPADDRSTR 
do 
#server 
    IPERRSTR[$COUNT]=$(sshpass -p pass ssh -o StrictHostKeyChecking=no -p 22 [email protected]$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

您是否嘗試過簡化它,例如,使用'scp'來複制文件? – jfs 2014-09-19 08:51:28

+0

我認爲你正在迴應後臺進程的退出狀態......這不是'nc'的退出狀態。 – 2014-09-19 08:51:55

+0

另外,爲什麼你的'ssh'命令在'$()'裏面? – 2014-09-19 08:56:23

回答

0

感謝所有球員,我想我已經解決了這個問題,這裏是原因和解決方案

之所以傳輸的文件是0字節傳輸已經不甚至開始!由於nc客戶端在nc偵聽後立即被調用,因此nc客戶端將有可能比偵聽進程更快啓動,因此我試圖在nc -l命令後的某個時間(〜1s)休眠以確保偵聽進程在客戶端啓動之前啓動,現在一切正常。

謝謝大家的回覆!