O 2>
está redirecionando o erro padrão de cat
. No entanto, cat
não está sendo executado porque o bash não pode abrir o arquivo que você especificou como entrada padrão para cat
. Para obter o comportamento desejado, use
(cat < foo) 2> bar
Isso executará cat < foo
em uma subshell e redirecionará a saída de erro de bash para bar. Se você também quer a saída de erro do gato, você poderia fazer
(cat < foo 2> bar) 2> bar2