Você não pode redirecionar ambos de e para um arquivo, pelo menos não desse jeito. O problema é que quando o shell configura a parte de redirecionamento para, ele trunca o arquivo. Então, tenta ler do arquivo, está vazio.
Se a sua distro tiver um pacote moreutils
, ela conterá um programa sponge
para resolver esse problema: tr 'a' 'z' < test.txt | sponge test.txt
funcionará.
Caso contrário, você precisa gravar sua saída em um arquivo temporário e usar mv
para sobrescrever o arquivo original.