O | pegará a saída do comando à esquerda e dará à entrada do comando à direita. O operador > pegará a saída do comando e a colocará em um arquivo. Isso significa que, no seu exemplo, quando chegar ao | , não haverá saída; está tudo em a.txt . Então, o sort à direita opera em uma string vazia e salva isso em b.txt
O que você provavelmente gostaria de usar é o comando tee , que irá gravar em um arquivo e stdout como
ls | tee a.txt | sort > b.txt
Embora eu esteja realmente curioso sobre o que você está tentando fazer, já que ls pode / irá classificar as coisas para você também.