Juste pour ajouter à la bonne réponse de @ jw013, il peut être utile de réaliser que c'est la même chose que
{
cat -n
cat -n
} < infile
< file
étant abrégé 0< file
, c'est utiliser le descripteur de fichier 0 au lieu de 3.
Et juste pour confondre un peu la question, cette version:
exec 3< infile
cat -n /dev/fd/3
cat -n /dev/fd/3
Se comporte différemment selon le système d'exploitation dans lequel vous l'exécutez et le type de infile
(fichier normal vs tuyau vs appareil ...)
Sur Solaris et la plupart des Unices commerciaux, un open("/dev/fd/3")
est plus ou moins équivalent à un dup(3)
(donc < /dev/fd/3
est à peu près le même que <&3
), tandis que sur Linux, pour les fichiers normaux, /dev/fd/3
est implémenté en tant que lien symbolique vers le fichier d'origine, donc l' open("/dev/fd/3")
ouvre à nouveau dès le début ( et éventuellement avec des drapeaux différents du fd 3).
Stéphane Chazelas
la source