Pipes, et comment les utiliser dans bash

Je vois des commandes comme celle-ci dans certains scripts: /bin/cat somefile | someprogram. Je voudrais savoir comment lire le tube entier de la même manière quun programme. Ainsi, lorsque jexécute /bin/cat something | myprogram.sh, myprogram.sh a une variable appelée mypipevar égale à ce qui a été diffusé – tout le texte du tube. Si cela nest pas clair, veuillez me le faire savoir. Jai lu que la lecture ne fonctionnera probablement pas et que bash nest peut-être pas le bon shell.

Réponse

Le tuyau se connecte stdout dun programme à stdin dun autre, donc dans votre script, lisez simplement à partir de stdin et vous obtiendrez ce que la commande précédente a imprimé. Un moyen simple de lire ceci dans une variable est dutiliser cat par exemple à lintérieur myprogram.sh:

mypipevar="$(cat ${1:-/dev/stdin})" echo "Obtained the value: "$mypipevar"" 

Cependant, tout à fait souvent vous voulez traiter les choses ligne par ligne plutôt que dun seul coup, cela peut être fait avec

while read line do echo "$line" done < "${1:-/dev/stdin}" 

Notez que ${1:-/dev/stdin} vous donnera le premier argument, ou si aucun argument nest spécifié alors /dev/stdin qui contiendra le contenu de stdin qui peut être lu comme un fichier. Cela vous permet dexécuter le script en tant que command | script ou simplement en tant que script filename.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *