Estou tentando entender pipes nomeados no contexto deste exemplo em particular.
Digito <(ls -l)
no meu terminal e recebo a saída como bash: /dev/fd/63: Permission denied
,.
Se eu digitar cat <(ls -l)
, poderá ver o conteúdo do diretório. Se eu substituir o cat
por echo
, acho que recebo o nome do terminal (ou é?).
echo <(ls -l)
dá a saída como /dev/fd/63
.
Além disso, este exemplo de saída não está claro para mim.
ls -l <(echo "Whatever")
lr-x------ 1 root root 64 Sep 17 13:18 /dev/fd/63 -> pipe:[48078752]
No entanto, se eu der, ls -l <()
ele me lista o conteúdo do diretório.
O que está acontecendo no caso do pipe nomeado?
mkfifo
cria apenas o canal nomeado, sem nenhum conteúdo. Então você precisa escrever para você mesmo (por exemplomkfifo mypipe; ls > mypipe
). E sim, as gravações no canal serão bloqueadas até que algum processo seja lido no canal.