Проблема в том, что у diff'а только один stdin. :) Так что второй файл придётся называть по имени.
Хотя конечно приходят мне в голову всякие нездоровые идеи насчёт /dev/stderr, но озвучивать не буду. :) Можно ещё named pipe юзать. Есть ещё более нездоровые идеи насчёт /dev/fd/*, но в обычных шеллах это точно нереализуемо.
Привязка к особенностям определенного шела, зачем?
Потом появляются программы зависимые от конкр. версии tcl/java/библиотек/...
mkfifo fifo1 fifo2
ls -lR dir1 > fifo1 &
ls -lR dir2 > fifo2 &
diff fifo1 fifo2
rm fifo1 fifo2
И никаких зависимостей.