A substituição do processo resulta em um arquivo especial (como /dev/fd/63
em seu exemplo) que se comporta como o final de leitura de um canal nomeado. Este arquivo pode ser aberto e lido, mas não escrito, não visualizado.
Comandos que tratam seus argumentos como fluxos puros funcionam enquanto comandos que esperam procurar em arquivos que recebem (ou escrever para eles) não funcionarão. O tipo de comando que funcionará é o que geralmente é considerado um filtro: cat
, grep
, sed
, gzip
, awk
, etc ... Um exemplo de um comando que não funciona é um editor como vi
ou uma operação de arquivo como mv
.
gcc
deseja poder executar acesso aleatório em seus arquivos de entrada para detectar em que idioma eles são gravados. Se você der gcc
uma dica sobre o idioma do arquivo de entrada, ficará feliz em transmitir o arquivo:
gcc -x c <(echo 'int main(){return 0;}')
A forma mais simples e direta sem substituição de processo também funciona:
echo 'int main(){return 0;}' | gcc -x c -
Observe que isso não é específico para bash
. Todas as camadas que suportam a substituição do processo se comportam da mesma maneira.