dispo de l'entree standard
Bonjour à tous.
Depuis quelques jours, je me pose une question existencielle à laquelle je n'ai pas encore obtenue de réponse.
En fait que désirerais écrire une fonction dont les attributs pourraient être à la fois passés en paramètre ou bien consommé via un pipe.
Un petit exemple vaut bien souvent de long discours :
Code:
1 2 3 4 5 6
|
# exemple avec passage de paramètre
maFonction "unAttribut" "unAutreAttribut"
# exemple avec pipe :
echo "unAttribut unAutreAttribut"|maFonction |
Pour résoudre ce problème voici comment j'ai procédé à l'interieur de ma fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
function maFonction {
if [[ "$#" != "0" ]] ; then
mesAttributs=$*
else
mesAttributs=$(cat)
fi
echo "mesAttributs=${mesAttributs}"
}
# Exemples d'utilisation qui fonctionnent
maFontion att1 att2
echo "att1 att2"|maFonction |
Le problème avec cette méthode se situe lors de l'utilisation du pipe. Si la commande avant pipe ne sort rien, alors le cat situé dans la fonction se bloque en attendant indéfiniment que quelque chose arrive :
uneCommande|maFonction
Si une uneCommande n'envoit rien en sortie, cela bloque.
Mes questions :
- Ma méthode pour réaliser une telle fonction est-elle bonne ? En existe-t-il d'autre(s) ?
- Y aurait-il quelque chose d'alternatif au cat qui par exemple planterait ($? != 0) si aucun flux n'arrive ? Dans tel cas, je pourrait traiter le cas d'un flux vide à l'intérieur de la fonction.
Sinon j'ai contourné le problème en imposant l'utilisation de passage de paramètre. On peut donc dire que mon problème est fonctionnellement résolu. Mais cette question me "turlupine" depuis quelques jours, et comme je n'aime pas rester sans réponse, je fais appel à vous "o grands maîtres du développement shell" ;)