Ele transforma uma string no descritor de arquivo para a saída do script bash que ele representa. Isso pode ser confuso, aqui está um exemplo
se você digitar echo <(ls)
, ele abrirá um novo descritor de arquivo, cujo nome será substituído. Então o comando pode se transformar em echo /dev/fd/63
.
Um programa que espera um arquivo pode agora ler a saída do comando sem ter que aceitar 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 ...
Muitos programas Linux, se não forem fornecidos com uma fonte de entrada, aguardam entrada padrão. Como a saída padrão pode ser canalizada para a entrada padrão com o operador "|", você pode usar, digamos, ls | grep hello
. Isso só funciona porque o grep teria esperado pela entrada, se ele esperasse que um nome de arquivo fosse aberto e lido para obter seus dados, o operador de pipe não funcionaria. É por isso que você precisa & lt; (...).
Espero que isso seja inteligível. : -)
Juntamente com o & lt; operador para redirecionar a saída de um arquivo para uma leitura de programas de stdin, isso faz para o seguinte significado :
Bash: leia a saída deste arquivo, que é criado a partir da saída deste comando.
Esclarecimentos:
- entrada padrão: um "arquivo" (não realmente, mas no linux tudo funciona como um arquivo) que, quando lido, contém magicamente o que você digitou
- saída padrão: um "arquivo" que, quando gravado, será impresso no terminal virtual
- operador (ou seja,
<
ou<()
): O mesmo que nas matemáticas regulares, as expressões de operadores e operandos serão avaliadas e substituídas. 3 + 2 * 3 se transforma em 5 * 3 se transforma em 15. É o mesmo na linguagem bash.
Um bom exemplo para enfatizar o ponto de Roger é esta expressão:
if [ -f my_condition ] then something fi
Aqui, o conteúdo dos colchetes será avaliado como uma instrução condicional, ou seja, se my_condition for true, faça alguma coisa. Mas: [
é na verdade apenas um alias do programa test
, que, quando chamado com o parâmetro -f, irá verificar se existe um arquivo.