Outils pour utilisateurs

Outils du site


dev:bash:redirection_stdin_stdout_stderr

Bash : redirection des entrées/sorties

Pour un shell interactif l'entrée standard (stdin), la sortie standard (stdout) et la sortie erreur standard (stderr) sont toutes les trois associées au terminal de l'utilisateur.

Cela peut être visualisé en listant le contenu de /proc/$$/fd

# Afficher les descripteurs ouverts pour le shell courant
ls -l /proc/$$/fd
total 0
lrwx------ 1 yoann yoann 64 janv. 18 18:08 0 -> /dev/pts/3
lrwx------ 1 yoann yoann 64 janv. 18 18:08 1 -> /dev/pts/3
lrwx------ 1 yoann yoann 64 janv. 18 18:08 2 -> /dev/pts/3
lrwx------ 1 yoann yoann 64 janv. 18 18:08 255 -> /dev/pts/3

Pour plus de détails à propos des descripteurs de fichiers voir la note file descriptors.

Bash a également un descripteur 255 supplémentaire pointant sur le terminal de l'utilisateur.
# Redirige la sortie de echo dans le fichier
# de descripteur 255 (->/dev/pts/3)
echo "Bonjour $USER" >&255
Bonjour yoann

La redirection des entrées sorties consistera à modifier les fichiers associés à ces descripteurs.

Redirection sur une commande

Les exemples ci-dessous permettent de rediriger la sortie standard et la sortie d'erreur de la commande dans un fichier:

command > "/path/to/file" 2>&1
 
# Equivalent via l'opérateur '&>' qui permet
# de rediriger à la fois stdout et stderr
command &> "/path/to/file"

Redirection pour le shell courant

Pour modifier les descripteurs associés au shell courant, il est possible d'utiliser la primitive exec sans commande en argument. La documentation détaille le fonctionnement de la primitive qui sans commande spécifiée applique les redirections sur le shell courant.

# Appliquer les redirections d'E/S
# sur le shell courant
exec 2> "/path/to/file"

Références

dev/bash/redirection_stdin_stdout_stderr.txt · Dernière modification : 2023/01/19 13:23 de yoann