[shell] cmd et pipe

Tout ce qui concerne la programmation.
Répondre
Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1343
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Bonsoir,

IL me semble qu'il existe un moyen dans un script shell, pour récupèrer les codes de sorties d'une commande lorsqu'elle est dans un ensemble pipe, tel que :

Code : Tout sélectionner

cmd1 | cmd2 | cmd3
Par exemple :

Code : Tout sélectionner

rm -f $file | zenity --notification --text="fichier effacé"
Merci de ne pas se focaliser sur 'rm' ou 'zenity', c'est pour l'exemple ;)
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour PengouinPdt
'man bash' a écrit :
   PIPESTATUS
     Une variable de type tableau (consultez Tableaux ci-dessous) contenant une liste des états finaux des processus exécutés
     dans la conduite exécutée la plus récemment au premier plan (qui peut éventuellement contenir une seule commande).

Code : Tout sélectionner

michel@debg53sw:~$ false | true | true | false | true
michel@debg53sw:~$ echo -e "${PIPESTATUS[0]}\n${PIPESTATUS[1]}\n${PIPESTATUS[2]}\n${PIPESTATUS[3]}\n${PIPESTATUS[4]}"
1
0
0
1
0
michel@debg53sw:~$ 
Avatar de l’utilisateur
Arnaud
Membre
Membre
Messages : 162
Inscription : 23 avr. 2016, 14:31
Localisation : Allemagne
Status : Hors-ligne

@PengouinPdt : tu poses la question et tu donnes la réponse, c'est cool :)
Ou alors il y a une question plus complexe qui se cache là derrière ?
Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1343
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

@Arnaud: en quoi je donne la réponse ?

@MicP : oui, mais c'est du pur bashism... en effet, le tableau PIPESTATUS fait l'affaire ;)

Mais j'aimerais trouvé une réponse qui soit plus POSIX !
Et, ce n'est pas si simple, en fait...
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
Avatar de l’utilisateur
Arnaud
Membre
Membre
Messages : 162
Inscription : 23 avr. 2016, 14:31
Localisation : Allemagne
Status : Hors-ligne

Ok, je n'avais pas compris correctement la question. En relisant moins en diagonal, c'est plus clair.
A part utiliser PIPESTATUS ou refaire le tableau soi-même, je ne vois pas.
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 4954
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

et en utilisant tee ?
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Répondre