Como é chamada a sintaxe do bash '(conteúdo do arquivo)?

25

Esta resposta no Security StackExchange usa uma sintaxe bash interessante para gerar um arquivo in-line:

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650

Esta parte é particularmente interessante:

<(openssl ecparam -name secp384r1)

Rodando apenas:

echo <(openssl ecparam -name secp384r1)

Eu recebo de volta /dev/fd/63

Portanto, isso parece fazer um descritor de arquivo temporário com o conteúdo do arquivo.

Como isso é chamado?

    
por mikemaccana 08.07.2016 / 13:23

1 resposta

35

É chamado de substituição de processos e é um recurso do bash, zsh e ksh (e possivelmente outros, eu não sei). Não é POSIX e você não deve usá-lo em código portátil, mas é muito útil.

Aqui está a seção relevante do manual da bash:

3.5.6 Process Substitution

Process substitution is supported on systems that support named pipes (FIFOs) or the /dev/fd method of naming open files. It takes the form of

  <(list) 

or

  >(list) 

The process list is run with its input or output connected to a FIFO or some file in /dev/fd. The name of this file is passed as an argument to the current command as the result of the expansion. If the >(list) form is used, writing to the file will provide input for list. If the <(list) form is used, the file passed as an argument should be read to obtain the output of list. Note that no space may appear between the < or > and the left parenthesis, otherwise the construct would be interpreted as a redirection.

When available, process substitution is performed simultaneously with parameter and variable expansion, command substitution, and arithmetic expansion.

    
por 08.07.2016 / 13:28