zsh
suporta substituição de processos , que deve fazer o que você está perguntando:
A command of the form =(...) is replaced with the name of a file containing its output.
Portanto, para o seu exemplo, para evitar a criação manual de um arquivo temporário para passar a saída de tr
para cmd
, você poderia dizer
cmd =(tr '[:upper:]' '[:lower:]' < data.txt)
Para outras camadas, o equivalente seria:
-
bash
:cmd <(tr '[:upper:]' '[:lower:]' < data.txt)
-
ksh
:cmd <(tr '[:upper:]' '[:lower:]' < data.txt)
-
rc
:cmd <{tr '[:upper:]' '[:lower:]' < data.txt}
Observe que bash
, ksh
e rc
implementam a substituição do processo usando pipes nomeados, em vez de arquivos temporários como zsh
usa, e exigem que o sistema de arquivos /dev/fd/
seja montado