Fichiers avec Bash

On a déjà l'habitude d'utiliser les 3 file descriptor stdin, stdout et stderr.

Leurs numéros sont utilisés lorsqu'on écrit des choses comme cela :

$ cd /root/ 2>/dev/null

On redirige le file descriptor 2 (stderr) vers le fichier /dev/null.

Créer ses file descriptors

Bash permet d'ouvrir/créer des fichiers et de leurs associer des file descriptor très facilement.

On peut en créer d'autres avec exec (attention tout doit être collé), qui seront soit :

Par exemple le code suivant qui crée un nouveau file descriptor qui est associé au fichier de la sortie standard:

$ exec 42>&1
$ echo coucou >&42
coucou
ls -la /proc/$$/fd/42
lrwx------ 1 fbrucker fbrucker 64 oct.  13 09:20 /proc/704757/fd/42 -> /dev/pts/0

Ou créer un file descriptor associer à un nouveau fichier :

$ exec 42>texte
$ echo coucou >&42
$ cat texte 
coucou
$ ls -la /proc/$$/fd/42
l-wx------ 1 fbrucker fbrucker 64 oct.  13 09:20 /proc/704757/fd/42 -> /home/fbrucker/texte

Supprimer un file descriptor se fait ensuite avec exec 42>&- :

$ exec 42>&-
$ ls -la /proc/$$/fd/42
ls: impossible d'accéder à '/proc/704757/fd/42': Aucun fichier ou dossier de ce type

Buffers