Mensagem de erro no terminal apesar de usar o símbolo 2

2

Por que este comando mostra uma mensagem de erro apesar de usar 2 > símbolo?

    cat < foo 2>bar
    bash : cannot open foo : No such file or directory
    
por crisron 31.12.2013 / 20:51

2 respostas

3

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
    
por 31.12.2013 / 20:59
2

Como anotações do @Casey, colocar o comando em um subshell funciona:

$ ( cat <foo ) 2>bar

No entanto, a subshell não é necessária. Uma lista simples funciona igualmente bem:

$ { cat <foo ; } 2>bar

Você nem precisa da lista se observar que a ordem em que os redirecionamentos são feitos faz a diferença:

$ cat <foo 2>bar
bash: foo: No such file or directory
$ cat 2>bar <foo

Minha conclusão é que o que importa é a ordem de processamento do bash: a questão é se stderr foi redirecionado antes ou após o momento em que bash descobre que o redirecionamento de stdin falha . Assim, não há saída do último exemplo acima porque bash primeiro redireciona stderr e então tenta abrir foo para stdin.

    
por 31.12.2013 / 22:29