Il transforme une chaîne en descripteur de fichier pour la sortie du script bash qu'il représente. Cela peut prêter à confusion, voici un exemple
si vous tapez echo <(ls)
il ouvrira un nouveau descripteur de fichier, dont le nom est substitué. Ainsi, la commande pourrait se transformer en echo /dev/fd/63
.
Un programme qui attend un fichier peut maintenant lire la sortie de la commande sans avoir à accepter stdin.
$ my_program ls
Error: 'ls': No such file or directory.
$ my_program <(ls)
my_program was called with the argument /dev/fd/63
bin dev etc ...
De nombreux programmes Linux, s'ils ne disposent pas d'une source d'entrée, attendent l'entrée standard. Comme la sortie standard peut être transférée vers l'entrée standard à l'aide de l'opérateur "|", vous pouvez alors utiliser say ls | grep hello
. Cela ne fonctionne que parce que grep aurait attendu une entrée de toute façon, s'il avait attendu un nom de fichier à ouvrir et à lire pour obtenir ses données, l'opérateur pipe ne fonctionne pas. C'est pourquoi vous avez besoin de <(...).
J'espère que c'est compréhensible :-)
Avec l'opérateur < pour rediriger la sortie d'un fichier vers un programme lisant stdin, cela donne ce qui suit signification :
Bash : lire la sortie de ce fichier, qui est créé à partir de la sortie de cette commande.
Clarifications :
- entrée standard : un "fichier" (pas vraiment, mais sous linux tout se comporte comme un fichier) qui, lorsqu'il est lu, contient comme par magie ce que vous avez tapé.
- sortie standard : un "fichier" qui, lorsqu'il est écrit, sera imprimé sur le terminal virtuel.
- (c'est-à-dire
<
o <()
) : Comme dans les mathématiques régulières, les expressions des opérateurs et des opérandes seront évaluées et substituées. 3+2*3 se transforme en 5*3 se transforme en 15. C'est la même chose dans le langage bash.
Un bel exemple pour souligner le point de vue de Roger est cette expression :
if [ -f my_condition ] then something fi
Ici, le contenu des parenthèses sera évalué comme une déclaration conditionnelle, c'est-à-dire que si ma_condition est vraie, alors faites quelque chose. Mais : [
est en fait juste un alias du programme test
qui, lorsqu'il est appelé avec le paramètre -f, vérifie si un fichier existe.