GNU/Linux >> Tutoriels Linux >  >> Linux

Impossible d'obtenir le bon code de sortie à partir d'un script ?

J'ai un script qui se connecte à un serveur distant via SFTP et récupère un fichier à partir de là. Mon script ressemble à ceci :

/usr/bin/sftp [email protected] <<EOF
lcd /dir1/dir2/dir3
cd /rsdir1/rsdir2/rsdir3
get file_pattern`date -d "last month" +%m%Y`.csv
EOF
rc=$?
        if [[ $rc != 0 ]]
           then
        echo "Error occured getting file and the script abended with error code $rc" `date "+%Y-%m-%d-%H.%M.%S"`
            exit 1
    else
    echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
        fi

Cependant, même si le script ne trouve pas le fichier avec le modèle, il passe au else une partie du script et me donne la sortie à l'écran comme

Connecting to remote.server.com...
sftp> lcd /dir1/dir2/dir3
sftp> cd /rsdir1/rsdir2/rsdir3
sftp> get file_pattern032014.csv
Couldn't stat remote file: No such file or directory
File "/rsdir1/rsdir2/rsdir3/file_pattern032014.csv" not found.
Successfully transferred the file YYYY-MM-DD-24HH.MI.SS 

Des conseils sur ce que je pourrais faire de mal ici ?

Réponse acceptée :

Vous avez le bon code de retour, la session sftp s'est exécutée correctement donc le code de retour est 0.
Vous devez utiliser scp à la place, il ne renvoie pas 0 en cas d'échec de la copie.

Vous pourriez faire quelque chose comme :

file=file_pattern`date -d "last month" +%m%Y`.csv 
[email protected]:/rsdir1/rsdir2/rsdir3/$file
local=/rsdir1/rsdir2/rsdir3/$file

if scp -q $remote $local
then
    echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
else
    echo "Error occured getting file and the script abended with error code $?" `date "+%Y-%m-%d-%H.%M.%S"`
    exit 1
fi

EDIT :j'ai changé la cible de la copie en un nom de fichier :si vous copiez dans un répertoire et que ce répertoire est manquant, vous créerez un fichier portant le nom du répertoire.


Linux
  1. Obtenir la taille d'un fichier distant à partir du terminal ?

  2. Comment obtenir le statut de sortie d'une boucle dans bash

  3. Comment obtenir le chemin d'accès au fichier actuel (pwd) sous Linux à partir de C ?

  4. Comment obtenir le répertoire absolu d'un fichier dans bash ?

  5. Obtenir une ligne spécifique à partir d'un fichier texte en utilisant uniquement un script shell

Comment obtenir le nom de fichier à partir du chemin complet sous Linux

Comment obtenir plus d'informations sur l'origine d'un code de sortie ?

Impossible d'obtenir l'éditeur de texte Atom à partir du centre logiciel ?

Comment puis-je obtenir la longueur d'un fichier vidéo à partir de la console ?

Comment obtenir l'URL du fichier Dropbox à partir de la ligne de commande ?

Script bash pour supprimer le fichier le plus ancien d'un dossier