10
votes

Obtenir le code d'état de sortie de la commande 'FTP' dans la coque Linux

J'ai besoin de rétrécir le code d'état de sortie d'un programme de ligne de commande. Pas de soucis, j'ai utilisé $?. Mais pour FTP, même s'il ne se connecte pas, il ouvre la coque FTP, donc je ne suis pas capable de comprendre que la connexion n'a pas eu lieu.

Essayez ce code pour comprendre: P>

#!/bin/sh

ftp 1234567
OUT=$?
if [ $OUT -eq 0 ];then
   echo "ftp OK"
else
   echo "ftp Error: "$OUT
fi

exit 0


1 commentaires

Vous pouvez considérablement simplifier le code: si ftp ...; alors ...; autre ...; fi il n'y a pas besoin de vérifier explicitement $?


6 Réponses :


1
votes

Certains scripts font - xxx pré>

sauf que ce qui précède ne fonctionne pas toujours - la plupart des clients FTP quittent toujours avec un statut de 0. Cela conduit à des "faux négatifs" laids. : Le transfert de fichier échoue, mais le script ne détecte pas le problème. strong> p>

Un moyen de vérifier qu'un transfert de fichier a eu lieu - Transférez-le: P>

#!/bin/sh

ftp -n << END_SCRIPT
open $1
user $2 $3
put $4
get $4 retrieval.$$
bye
END_SCRIPT

if [ -f retrieval.$$ ]
then
    echo "FTP of $4 to $1 worked"
    rm -f retrieval.$$
else
    echo "FTP of $4 did not work"
fi


2 commentaires

Pour la première réponse, pour être honnête, je ne comprends vraiment pas très bien votre solution.


J'ai travaillé sur votre première solution et cela a fonctionné avec un peu de modification: i Exécution du FTP en mode Verbose, si dans le FTP.worked est présent, le transfert "226 OK" de sorte que le transfert a été fait! ElseSIF I Retente le message d'erreur de FTP.FAILED. Merci! +1 pour vous!




20
votes

Vous devez rechercher un message de réussite de la commande FTP plutôt que de rechercher un statut. C'est "226 transfert complet". Vous pouvez le confirmer avec le manuel FTP sur votre système. XXX PRE>

Voici un exemple de script. P>

FTPLOG=/temp/ftplogfile
ftp -inv <<! > $FTPLOG
open server
user ftp pwd
put filename
close
quit
!

FTP_SUCCESS_MSG="226 Transfer complete"
if fgrep "$FTP_SUCCESS_MSG" $FTPLOG ;then
   echo "ftp OK"
else
   echo "ftp Error: "$OUT
fi
exit 0


1 commentaires

Merci pour votre réponse! C'est la même chose que j'ai faite, basée sur la solution postée par AYUSH, en utilisant deux fichiers pour la sortie afin d'obtenir l'erreur de message.



0
votes

La dernière fois que j'avais besoin d'utiliser FTP dans un script, je suis tellement frustré par le fait que j'ai enfin trouvé une source client FTP sous licence BSD et simplement la modifier pour lui donner le comportement dont j'avais besoin et a utilisé cela au lieu de la Version fournie avec le système d'exploitation.

moche, mais la profondeur des bosses de niveau de la tête dans la paroi du cube commençait à se ridiculer


1 commentaires

Il fournit en fait un chemin d'accès à une solution - Personnalisation de l'outil est une réponse d'un programmeur et vous n'avez pas à mettre en œuvre la fonctionnalité à partir de zéro si vous commencez par la source sous licence BSD. Mais oui, wget pourrait être plus simple. Ou non surprenant aujourd'hui (mais peut-être pas quand cela a été demandé) Il existe des bibliothèques clientes FTP pour Python que je considère sérieusement si elles sont confrontées au même problème que j'étais en 2008.



2
votes

Essayez les scripts suivants.

à copier: xxx

pour déplacer: xxx

voici quelques Cas de test:

pour la copie. xxx

pour le déplacement. xxx

mise à jour: N'oubliez pas de LIRE MAN 5 NETRC


0 commentaires

0
votes

Une autre solution consiste à vérifier si vous avez le fichier sur votre transfert de courrier serveur!

quelque chose comme ... p>

p>

if ![ -s "$INPUT_DIR/HOP_PSA_Transactions_$BATCH_ID.csv" ]
then
    ## No Transactions file
    FAIL_TIME=`date +"%d-%m-%Y %H:%M"`
	echo "ERROR: File HOP_PSA_Transactions_$BATCH_ID.csv not found @ $FAIL_TIME" >>$LOGFILE_DIR$LOGFILE_NAME
	exit $ERR_NO_TRANS_FILE    
fi


0 commentaires