Bash : redirections et communications inter-processus

Navigation rapide : Lundi / Mardi / Mercredi / Jeudi / Vendredi

Dans la norme POSIX qui régit notamment les systèmes Unix, chaque exécution de programme donne lieu à l'instanciation d'un processus en mémoire centrale du CPU.

Tout processus est caractérisé par trois flots de données :

  1. L'entrée standard correspond aux données saisies par l'utilisateur et est donc généralement réliée au clavier du terminal. Tout ce qui sera tapé au clavier sera donc reçu par l'entrée standard d'un processus.
  2. La sortie standard correspond aux données produites par le programme et est donc généralement reliée à l'écran du terminal. Tout ce que le processus (programme) écrira sur son entrée standard sera donc affiché à l'écran.
  3. La sortie d'erreur standard est similaire à la sortie standard mais ne contient que les messages d'erreur

Un système Unix offre la possibilité de rediriger ces flots.

Redirection de l'entrée standard (stdin)

  • Depuis un fichier (<) : la commande lit ses données à partir du fichier au lieu du clavier
grep 'root' < /etc/passwd
  • Depuis une autre commande : la sortie standard de la première commande devient l'entrée de la seconde formant un tube de communication
cat  /etc/passwd | grep 'root'

Redirection de la sortie standard (stdout)

  • Vers un fichier (>) : tout ce que la commande écrit sur sa sortie standard est écrit dans le fichier. S'il n'existait pas, il est créé. S'il n'était pas vide son contenu est écrasé.
sort /etc/passwd > passwd.sorted
  • Vers un fichier en ajout (») : tout ce que la commande écrit sur sa sortie standard est écrit à la fin du fichier en en préservant le contenu existant (ajout). S'il n'existait pas, il est créé.
sort /etc/passwd >> passwd.sorted
  • Vers une autre commande (|) : tout ce que la commande écrit sur sa sortie d'erreur standard est passé à l'entrée standard de la seconde commande.
cat /etc/passwd | tr ':' ';'

Redirection de la sortie d'erreur standard (stdout)

  • Vers un fichier (2>) : tout ce que la commande ecrit sur sa sortie d'erreur standard est écrit dans le fichier. S'il n'existait pas, il est créé. S'il n'était pas vide son contenu est écrasé.
ls /no/path/found 2> /tmp/lserror.txt
  • Vers un fichier en ajout (2») : tout ce que la commande ecrit sur sa sortie d'erreur standard est écrit à la fin du fichier en en préservant le contenu existant (ajout). S'il n'existait pas, il est créé.
ls /no/path/found 2> /tmp/lserror.txt
shell_com.txt · Last modified: 2012/05/21 02:46 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki