Chaque commande a une entrée standard, une sortie standard, et une sortie d'erreur. Par défaut, l'entrée standard est le clavier, la sortie standard est l'écran, et la sortie d'erreur est aussi l'écran.
On peut rediriger la sortie standard d'une commande vers un fichier (caractère >). Le résultat de la commande sera placé dans le fichier au lieu de s'afficher sur l'écran. Exemple:
poly=> ls -l >foo
Le résultat de ls -l ne s'affiche pas à l'écran, mais il est placé dans le fichier foo. On peut alors taper
poly=> more foo
pour lire le fichier page par page.
On peut aussi rediriger l'entrée standard d'une commande (caractère <). La commande lira alors le fichier au lieu du clavier. Exemple:
poly=> elm joffre <foo
envoie par mail à Joseph Joffre le résultat de la commande ls -l de tout à l'heure.
On peut aussi taper more <foo qui est équivalent à more foo car more sans argument lit son entrée standard et l'affiche page par page sur le terminal.
On peut aussi se passer du fichier intermédiaire grâce à un pipe (caractère |). Un pipe connecte directement la sortie standard d'une commande sur l'entrée standard d'une autre commande. Exemple: pour afficher page par page la liste des fichiers du répertoire courant, faire
ls -l | more
La panoplie complète des redirections est la suivante:
Remarques: Normalement, une redirection avec > sur un fichier qui existe déjà efface le contenu du fichier avant d'y placer le résultat de la commande. Il existe une option qui dit au shell tcsh| de refuser d'effacer le fichier.
Le pipe avec | est utile pour capturer tout ce qui sort d'une commande. Exemple: ls -R / | more: affiche page par page la liste de tous les fichiers du système, sans que les messages d'erreur dérangent l'affichage.
Une ligne de commandes contenant des | s'appelle un pipe-line. Quelques commandes souvent utilisées dans les pipe-lines sont:
Exemples:
poly=> cat glop buz >toto
Concatène les fichiers glop et buz et place le résultat dans toto.
poly=> wc -w /usr/dict/words
Affiche le nombre de mots du dictionnaire Unix.
poly=> grep gag /usr/dict/words | tail
Affiche les 20 derniers mots du dictionnaire qui contiennent la chaîne gag.