Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 15-08-2018 03:58:03

Patriboom
Membre
Lieu : Arctique canadien
Distrib. : Buster (10)
Noyau : Linux 4.19.37-5
(G)UI : MATE
Inscription : 25-12-2008
Site Web

Capter une erreur bash

Bonjour,

je reviens à mon programme de transfert de données vers le web.

Voici le code:


function Televerse(){
        SITFTP="ftp.monsite.ici"
        USAFTP="codeacces@monsite.ici"
        MPSFTP="MotP@sseFTP"
        PRTFTP=21
        source FichierSource.cnf

        ftp -i -n $SITFTP $PRTFTP <<FTP_CONNEX
                quote USER $USAFTP
                quote PASS $MPSFTP
                bin
                put plongee.cnf $1.log
                cd Contenu
                put $2
                quit
FTP_CONNEX
}


 



J'ai un souci de sécurité - c'est une autre histoire, sujet d'un autre fil - mon hébergeur est passé à FTP 1.2 et depuis ce temps, la connexion directe FTP ne fonctionne plus.

Profitons-en pour régler quelque chose d'autre.

Le code ci-haut me retourne cinq messages d'erreur, comme suit:

Not connected.
Not connected.
Not connected.
Not connected.
Not connected.



Mais mon interprétation de ces messages - elle - me dit que tout va bien.
La-dite interprétation se fait ici:


        sudo bash -c "$FUNC; Televerse $pseudo $fichier"

        if [ $? = 0 ]
        then
                echo -e "\033[0;32m Le téléversement de vos plongées a réussi. \033[0m"
                echo -e "Vos plongées apparaîtront dans votre dossier de plongee dans quatre à sept minutes."
       else
                echo -e "\033[0;31m Il a été impossible de téléverser vos données vers plongee.ca \033[0m"
                echo -e "Vous pouvez tenter d'exécuter le fichier ./plongee.xfer manuellement"
                echo
        fi
else
 



Pourquoi n'obtiens-je pas le message d'erreur prévu ( « Il a été impossible ... » ) ?
Comment faire en sorte que le message d'erreur soit affiché ?

Merci à l'avance.


Portez la paix
Patrick Allaire, ptre

Hors ligne

#2 06-01-2019 00:38:38

marcus68
Membre
Distrib. : Debian stable
Noyau : Linux 4.9.0-8-amd64
Inscription : 05-01-2019

Re : Capter une erreur bash

Bonjour,

Après analyse de ton script ...

Pour que le message "Il a été impossible de téléverser vos données vers plongee." apparaissent, il faut que $? soit égale à 0.

$? étant le résultat de la dernière commande executé.

sudo bash -c "$FUNC; Televerse $pseudo $fichier"



la dernière commande (sudo et bash retransmette le résultat des commandes éxecutées) est

Televerse $pseudo $fichier



$? dépend donc de ta fonction Televerse et de sa dernière commande.

pour une raison inconnue ftp renvoie 0

EDIT : j'efface la fin du message, je suis aussi fatigué lol

Dernière modification par marcus68 (06-01-2019 00:45:07)

Hors ligne

#3 06-01-2019 21:01:08

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : Capter une erreur bash

Ici tu as un workaround concernant la commande ftp qui retourne, toujours, un code status 0 : http://stratigery.com/scripting.ftp.html

L'idée consiste à finir le script ftp par un 'get file' pour ensuite vérifier que le fichier a bien été téléchargé:

if [ -f "file" ]
then
  rm -f file
  ....
else
  ....
fi
 

Dernière modification par Beta-Pictoris (06-01-2019 21:05:16)

En ligne

#4 06-01-2019 21:10:04

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Capter une erreur bash

Le mieux pour analyser un script bash c'est, au début du script, d'ajouter "set -x". Si tu veux que ça s'arrête à la première erreur, tu peux ajouter "set -e" ou "set -xe".

J'en use et en abuse depuis que j'ai trouvé le truc, et c'est vraiment pratique pour debugger.

datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

En ligne

#5 06-01-2019 21:21:01

empanada
Membre
Distrib. : Debian 9 (Stretch)
Noyau : 4.9.0-7-amd64
(G)UI : LXDE
Inscription : 19-09-2018

Re : Capter une erreur bash

Beta-Pictoris a écrit :

Ici tu as un workaround concernant la commande ftp qui retourne, toujours, un code status 0 : http://stratigery.com/scripting.ftp.html
L'idée consiste à finir le script ftp par un 'get file' pour ensuite vérifier que le fichier a bien été téléchargé:


Pas mal, l'idée, mais selon le script de PAtriboom "echo -e "Vos plongées apparaîtront dans votre dossier de plongee dans quatre à sept minutes."" Il s'avère trop je crains. Peut-être mieux utiliser non seulement le "exit status" mais le "output", avec quelque chose du genre

SORTIE=$(ftp -i etc,etc,....)


Et après, lancer erreur si $? différent de zero  OU  SORTIE contient "Not connected"
Salut


"blues are the roots and the other musics are the fruits" . Willie Dixon

Hors ligne

#6 06-01-2019 23:57:33

Patriboom
Membre
Lieu : Arctique canadien
Distrib. : Buster (10)
Noyau : Linux 4.19.37-5
(G)UI : MATE
Inscription : 25-12-2008
Site Web

Re : Capter une erreur bash

Merci, je testerai la solution de vérification par rappel du fichier

 One way to verify that a file transfer took place - transfer it back:
#!/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
 



(tiré du site cité )

Ce qui devrait donc me donner:


function Televerse(){
  SITFTP="ftp.domaine.ca"
  USAFTP="usager@domaine.ca"
  MPSFTP="MotPasse"
  PRTFTP=21
  source plongee.cnf

  ftp -i -n $SITFTP $PRTFTP <<FTP_CONNEX
    quote USER $USAFTP
    quote PASS $MPSFTP
    bin
    put plongee.cnf $1.log
    cd Contenu
    put $2
    get $2 retour.log
    quit
FTP_CONNEX

}
 



Si je comprends bien, la commande get $2 retour.$$ étant la dernière, c'est là que j'obtiendrai le 0 ou le 1 attendu dans mon traitement de résultat, à savoir

  if [ $? = 0 ]
  then
    echo -e "\033[0;32m Le téléversement de vos plongées a réussi. \033[0m"
    echo -e "Vos plongées apparaîtront dans votre dossier de plongee dans quatre à sept minutes."
    echo -e "( Voyez la section 'Registre' ou l'adresse suivante: http://plongee.ca/index.php?mod=Registre )"
    rm retour.log
  else
    echo -e "\033[0;31m Il a été impossible de téléverser vos données vers plongee.ca \033[0m"
    echo -e "Vous pouvez tenter d'exécuter le fichier ./plongee.xfer manuellement"
    echo
  fi
 



J'ajouterai alors la ligne comme ci-haut : rm retour.$$

Dernière modification par Patriboom (07-01-2019 00:08:38)


Portez la paix
Patrick Allaire, ptre

Hors ligne

Pied de page des forums