Você estava muito perto:
tr "o" "a" < <(echo "Foo")
A substituição <()
faz um descritor de arquivo e apenas cola o caminho para o shell. Para compreensão basta executar:
<(echo blubb)
Você verá o erro:
-bash: /dev/fd/63: Permission denied
É por isso que apenas cola /dev/fd/63
no shell e /dev/fd/63
não é exequível, porque é um simples pipe. No tr
-exemplo acima, é echo "Foo"
que grava no pipe e através do redirecionamento de entrada <
é o comando tr
que lê o descritor de arquivo.