[Bash] Redirection de stdout et test succès commande

Redirection de stdout et test succès commande [Bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 06-07-2007 à 11:55:24    

Bonjour,
 
J'ai un petit problème avec un script bash, qui se présente comme suit:


#!/bin/sh
wget -q -O - http://aurait.eu |\
while read ligne
do
 
.... Divers traitements ...
 
done


 
Mon problème est que j'aimerais tester la valeur retournée par le wget, sans changer ce qui est renvoyé au read.
 
J'ai testé un :

wget -q -O - http://aurait.eu || exit 1 |\


Mais ça ne fonctionne pas...
 
Si quelqu'un a une idée, elle est la bienvenue.
 
Merci.


---------------
--
Reply

Marsh Posté le 06-07-2007 à 11:55:24   

Reply

Marsh Posté le 06-07-2007 à 11:56:20    

$? contient le retour de la dernière commande exécutée...


---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 06-07-2007 à 11:56:58    

après le wget, tu regardes le contenu de la variable $?
Si c'est 0, le résultat est ok, sinon c'est que ça a merdé

 

wget ...
[ $? -ne 0 ] && putain_dmerde_caytouplantay

 

de rien :o

 

edit: [:benou_grilled]

Message cité 1 fois
Message édité par wedgeant le 06-07-2007 à 11:57:27

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 06-07-2007 à 12:01:14    

Idem pour :

echo `wget -O - http://auzerait.eu -q || exit 1` |\
 while read ligne
do
echo ok
done


 
Le premier "exit 1" ne sort pas du script: le "ok" s'affiche, alors que pourant l'url n'est pas bonne.


---------------
--
Reply

Marsh Posté le 06-07-2007 à 12:06:09    

wedgeant a écrit :

après le wget, tu regardes le contenu de la variable $?
Si c'est 0, le résultat est ok, sinon c'est que ça a merdé

 

Oui, je sais bien que $? contient le code de retour.
Le problème c'est qu'avec ce script :

#!/bin/sh
wget -O - http://aurait.eu -q
[ $? -ne 0 ] && exit 1|\
while read ligne
do
        echo ok
done

 

J'obtiens comme résultat :

bash ./test
83.206.53.54


Alors que je devrais avoir : "ok" .


Message édité par leto le 06-07-2007 à 12:10:06

---------------
--
Reply

Marsh Posté le 06-07-2007 à 13:03:12    

#!/bin/bash
 
monip=`wget -q -O - http://aurait.eu`
if [ $? -eq 0 ]
then
        echo "ok $monip"
fi


 
je sais pas si c'est super propre comme tu le veux mais ca marche...


---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 06-07-2007 à 14:24:49    

Code :
  1. #!/bin/sh
  2. set -o pipefail
  3. wget -q -O - http://aurait.eu |\
  4. while read ligne
  5. do
  6. .... Divers traitements ...
  7. done || exit 1

Reply

Marsh Posté le 06-07-2007 à 14:50:40    

juste comme ca, pour ma culture, c'est beaucoup plus propre ton code ? Ou c'est juste une facon de faire autrement ?  :)


---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 06-07-2007 à 16:11:18    

C'est pas une question de plus propre où non : ton script ne permet pas de faire quoi que ce soit avec la sortie de wget, donc ça ne répond pas au problème.
 
Edit : d'ailleurs la solution de fighting_falcon ne fait pas non plus exactement ce qui était demandé. Si l'une des commandes à droite du pipe échoue, tu va prendre faire le exit 1 même si le wget a réussi.


Message édité par matafan le 06-07-2007 à 16:15:20
Reply

Marsh Posté le 06-07-2007 à 16:13:43    

j'avais cru qu'il voulait juste récupérer l'ip retournée par son site...  :sweat:


---------------
-_- http://www.scienceshopping.com -_-
Reply

Marsh Posté le 06-07-2007 à 16:13:43   

Reply

Marsh Posté le 07-07-2007 à 09:50:55    

j'ai pas testé mon code (pas le temps dsl), le truc important c'était le  

Code :
  1. set -o pipefail


 
je sais que j'avais butté sur un truc à la con du même genre (enchaînement de commandes, mais sortie dès que l'une foire, ou seulement si toutes foirent), ce qui m'avait amené à trouver ce "set -o pipefail"
 
j'ai posté ça comme une éventuelle piste ...

Reply

Marsh Posté le 11-07-2007 à 12:14:03    

use file descriptor luke ! :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 12-07-2007 à 09:54:29    

Xavier_OM a écrit :

use file descriptor luke ! :o


 
C'est à dire ? :)


---------------
--
Reply

Marsh Posté le 12-07-2007 à 09:55:04    

_p1c0_ a écrit :

j'avais cru qu'il voulait juste récupérer l'ip retournée par son site...  :sweat:


C'était qu'un exemple, le script est utilisé avec un site qui donne bcp plus d'infos que l'ip publiqeu.


---------------
--
Reply

Marsh Posté le 14-07-2007 à 12:43:46    

leto a écrit :

C'est à dire ? :)


 
ben si tu passes par un fichier temporaire, tu fais un truc du genre :
- wget url -o file
- test du retour de wget
- while read line; do blabla; done < file
 
donc faut juste réussir à se passer du fichier temporaire. Les file descriptors sont une bonne solution je pense :
http://tldp.org/LDP/abs/html/io-redirection.html
 
:o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 16-07-2007 à 16:09:34    

Dans le nom "file descriptor", il y a "file". On dirait bien qu'il crée un fichier non?
Dans ce cas, autant créer un fichier temporaire avec mktemp non?


---------------
--
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed