Redirections d’entrée sorties

Les flux standards

Chaque programme possède 3 flux standards qu’il utilise pour communiquer en général avec l’utilisateur :

* l’entrée standard nommée stdin (identifiant 0) : il s’agit par défaut du clavier,
* la sortie standard nommée stdout (identifiant 1) : il s’agit par défaut de l’écran,
* la sortie d’erreur standard nommée stderr (identifiant 2) : il s’agit par défaut de l’écran.

rem : un programme peut aussi intéragir avec d’autre programmes (pipe)

Redirections

Ces flux peuvent etre redirigés vers des fichiers ou…d’autres flux (grace au caractere ‘&’)
< ou 0< indique une redirection d’entree
> ou 1> indique implicitement stdout
>> indique une redirection de sortie sans ecraser le fichier (mode ‘ ajouter’ ou ‘append’)
2> indique une redirection de stderr (> tout court serait ambigu)
2>&1 indique une redirection du flux stderr vers stdout
1>&2 indique une redirection du flux stderr vers stdout

note : on ne peut par rediriger VERS le clavier !!
note : 2>&1 n’est utile que si stdout est lui meme redirigé, car par defaut stderr va dans stdout !
exemples simples

$> # on concatene 2 fichiers dans un troisième

$> cat fich1 fich2 > fich1plus2
$> # on renvoie les erreurs de compilation dans un fichier
$>  cc -c monFich.c 2> erreurs
$> # on récupère des paramètres a partir d’un fichier
$>  monProg < defaultValues
$>  # on redirige, et on ajoute un message a la fin du fichier
$> cat  f1 f2 >  s1.txt

$> echo “c’est termine” >> s1.txt

On va voir ci après quelques application un peu moins simples…

On crée un fichier  redir.sh avec vi, qui lit des données (un nom de fichier) affiche une sortie (le contenu du fichier) ou une erreur (si le fichier n’existe pas)

# redir.sh
echo “Entrer un nom de fichier”
read NOM
cat $NOM

Flux standards

$> redir.sh
Entrer un nom de fichier
bonjour.sh
echo bonjour
# message d’invite a l”ecran par defaut
# lecture du clavier par défaut
# le fichier  existe affichage du contenu a l’ecran par defaut
# si le fichier n’existait pas, erreur a l’ecran par defaut

Redirection vers ou de fichier

essai avec redirections simple des 3 fluxs vers des  fichiers
redir.sh 0<entree.txt 1>sortie.txt 2>erreur.txt

note : on peut utiliser un pseudo fichier poubelle pour envoyer les sorties….nulle part. Ce fichier s’appelle ‘/dev/null’s
redir.sh 0<entree.txt 1>/dev/null 2>/dev/null
…le programme est muet dans tous les cas !

Redirections de flux vers flux

# les erreurs vont dans erreur.txt mais la sortie correcte AUSSI !
redir.sh 0<entree.txt 2>erreur.txt 1>&2
# attention a l’ordre !
redir.sh 0<entree.txt 1>&2 2>erreur.txt
# envoie la sortie vers les erreurs (par defaut stderr) et ENSUITE les erreurs dans un fichiers

redir.sh 0<entree.txt 2>&1 >sortie.txt
# inutile !
redir.sh 0<entree.txt >sortie.txt 2>&1
# renvoie tout vers sortie.txt , meme les erreurs

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Twitter picture

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Connexion à %s

Suivre

Get every new post delivered to your Inbox.