Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1515 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°931120
leto
Posté le 06-07-2007 à 11:55:24  profilanswer
 

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.


---------------
--
mood
Publicité
Posté le 06-07-2007 à 11:55:24  profilanswer
 

n°931122
_p1c0_
Posté le 06-07-2007 à 11:56:20  profilanswer
 

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


---------------
-_- http://www.scienceshopping.com -_-
n°931123
wedgeant
Da penguin inside
Posté le 06-07-2007 à 11:56:58  profilanswer
 

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
n°931128
leto
Posté le 06-07-2007 à 12:01:14  profilanswer
 

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.


---------------
--
n°931134
leto
Posté le 06-07-2007 à 12:06:09  profilanswer
 

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

---------------
--
n°931164
_p1c0_
Posté le 06-07-2007 à 13:03:12  profilanswer
 

#!/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 -_-
n°931209
fighting_f​alcon
Posté le 06-07-2007 à 14:24:49  profilanswer
 

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

n°931251
_p1c0_
Posté le 06-07-2007 à 14:50:40  profilanswer
 

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 -_-
n°931315
matafan
Posté le 06-07-2007 à 16:11:18  profilanswer
 

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
n°931318
_p1c0_
Posté le 06-07-2007 à 16:13:43  profilanswer
 

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


---------------
-_- http://www.scienceshopping.com -_-
mood
Publicité
Posté le 06-07-2007 à 16:13:43  profilanswer
 

n°931531
fighting_f​alcon
Posté le 07-07-2007 à 09:50:55  profilanswer
 

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 ...

n°933024
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 11-07-2007 à 12:14:03  profilanswer
 

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.
n°933343
leto
Posté le 12-07-2007 à 09:54:29  profilanswer
 

Xavier_OM a écrit :

use file descriptor luke ! :o


 
C'est à dire ? :)


---------------
--
n°933344
leto
Posté le 12-07-2007 à 09:55:04  profilanswer
 

_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.


---------------
--
n°934002
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 14-07-2007 à 12:43:46  profilanswer
 

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.
n°934618
leto
Posté le 16-07-2007 à 16:09:34  profilanswer
 

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?


---------------
--

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
IPTABLES : redirectionbash : ouvrir un .url dans le browser par defaut ?
bash et imagemagickRedirection d'url avec DNS
Lancer une commande à telle heureQuestion de redirection ...
commande UNIX pour libérer de la RAM?[résolu] Bash : parcours d'un répertoire et suppression des "*~"
Comment exclure certains fichiers d'une commande ? 
Plus de sujets relatifs à : [Bash] Redirection de stdout et test succès commande


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR