Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/12/2008, à 23:52

Totor

[Résolu] ksh - code retour d'un processus dans un pipeline

Bonsoir,

Contexte :
Dans un script ksh, j'ai une fonction qui écrit dans la sortie standard et qui renvoie un code retour. Je ne peux pas modifier cette fonction.
J'aimerai pouvoir récupérer le code retour de cette fonction tout en traçant ce qu'elle affiche dans un fichier ainsi que  l'affichage écran.

De façon simpliste, j'ai voulu faire ceci :

function maFonction
{
   echo TOTO
   return 1
}

{ maFonction; CODE=$?; } | tee -a monFichier
 echo $CODE

Mais bon, utilisant un pipeline, { maFonction; CODE=$?; } est exécutée par un processus indépendant et la variable CODE n'a qu'une portée locale à ce processus. Elle n'est donc plus valorisée après exécution du pipeline.

Une solution en vue ? car là je bloque... j'ai cherché et tenté plein de trucs avec les redirections <(, >( & Co mais sans succès.
Note :  une solution sans fichier temporaire SVP !
De même, pas de pipefail car cela ne me permet pas de récupérer la sortie standard de la fonction !

Note, il m'est impossible de faire ceci (pour d'autres contraintes du reste du code) :

(
 maFonction
 if [ $? ... ]; then
 ...
 fi
 ...
)|tee -a nomFichier

Dernière modification par Totor (Le 19/12/2008, à 12:11)


-- Lucid Lynx --

Hors ligne

#2 Le 19/12/2008, à 03:37

thevert

Re : [Résolu] ksh - code retour d'un processus dans un pipeline

Voilà la bête :

#!/usr/bin/ksh

function maFonction
{
    echo TOTO
    return 1
}

{ 
CODE=$({ { maFonction; echo "$?" >&3 ;} | tee -a monFichier ;} 3>&1 >&4 4>&-)
} 4>&1

echo $CODE

ps: en bash il suffirait d'utiliser PIPESTATUS au lieu de $? :

#!/bin/bash

function maFonction
{
	echo TOTO
	return 1
}

maFonction | tee -a monFichier
echo $PIPESTATUS

#3 Le 19/12/2008, à 12:11

Totor

Re : [Résolu] ksh - code retour d'un processus dans un pipeline

Merci beaucoup !
J'ai quelques difficultés avec le mécanisme des redirections donc je ne comprends pas trop comment ça fonctionne même si je vois le principe générale.

Je regarderai de plus près plus tard.

Merci


-- Lucid Lynx --

Hors ligne

#4 Le 20/12/2008, à 15:14

Totor

Re : [Résolu] ksh - code retour d'un processus dans un pipeline

Hello !

Bon, j'ai tout compris ... sauf un truc :
Pourquoi fermer la sortie associée au descripteur 4 et ne pas le faire pour le 3, ce qui donnerait ?

{ 
CODE=$({ { maFonction; echo "$?" >&3 3>&- ;} | tee -a monFichier ;} 3>&1 >&4 4>&-)
} 4>&1

d'ailleurs, pourquoi les fermer ?


-- Lucid Lynx --

Hors ligne