2014-09-19 3 views
0

Je me bats depuis longtemps sur la situation étrange de transfert de fichiers en utilisant nc, j'utilise le script bash suivant pour transférer des fichiers d'une machine à l'ordinateur B, le script semble bien et le fichier est en cours transfert à la machine B, cependant la taille du fichier est de 0 octet et n'a pas de contenu (qu'il contient réellement dans la machine A), puis je lance mon script une seconde fois et cette fois la machine B contient du contenu, puis-je savoir quelle partie mon script provoque ce problème? Million merci pour l'aide!Fichier vide lors du transfert de fichiers en utilisant 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

avez-vous essayé de le simplifier, par exemple, utilisez 'scp' pour copier le fichier? – jfs

+0

Je pense que vous faites écho au statut de sortie d'un processus en arrière-plan ... ce qui n'est pas le statut de sortie de 'nc'. –

+0

Aussi, pourquoi votre commande 'ssh' est-elle dans' $() '? –

Répondre

0

Merci à tous les gars, je pense avoir résolu le problème, voici la cause et la solution

La raison pour laquelle le fichier transféré est 0 octet est que le transfert n'a pas même commencé! Comme le côté client nc est appelé juste après l'écoute nc, il y a des chances que le client nc démarre plus vite que le processus d'écoute, donc j'essaie de dormir quelquefois (~ 1s) après la commande nc -l pour m'assurer que le processus d'écoute est démarré avant le démarrage du client, alors tout fonctionne bien maintenant.

Merci à tous pour la réponse!

Questions connexes