Você teria que usar eval no script assim que $@ fosse mais do que um comando simples (o argumento para o script deve ser passado como uma string entre aspas):
ls | eval "$@"
Mas, novamente, isso também seria o mesmo que
pass_command sort | uniq
, por exemplo, você passa o comando sort e o uso uniq na saída.
Eu não vejo nenhum uso real para este tipo de script ou função, já que a capacidade de pipelining do Unix parece cobrir a maioria das aplicações práticas.