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