Traiter un fichier sur stdin

Gérer l'entrée stdin en shell UNIX

Problématique

UNIX permet de rediriger en entrée (STDIN) et en sortie (STDOUT, STDERR) des informations. Si les commandes UNIX standard gèrent bien la redirection d'un fichier en entrée, la question peut se poser si l'on veut le faire soi-même dans un shell.

Solution

Une commande UNIX standard récupère un fichier (ou des informations au clavier) en entrée de la manière suivante :

more < mon_fichier.txt

Pour créer un shell capable de récupérer un fichier envoyé sur l'entrée standard, il faut utiliser la commande cat de la façon suivante :

#!/bin/sh
#récupération du fichier sur STDIN
cat - >> stdout.temp

Puis traiter le contenu du fichier stdout.temp. ou encore, sans redirection :

#!/bin/sh
#récupération du fichier sur STDIN
cat - | ma_commande ...

L'on peut utiliser la commande read, mais celle-ci ne lit qu'une seule ligne à la fois. Si l'on veut utiliser read, il faut réaliser une boucle :

#!/bin/sh
#récupération du fichier sur STDIN
while read LINE
do
echo ${LINE} >> stdout.txt
done