Почему вывод STDERR из Ruby предшествует более раннему выводу STDOUT при перенаправлении?

В bash это дает результат в ожидаемом порядке:

ruby -e "puts 'one'; raise 'two'"
one
-e:1:in `<main>': two (RuntimeError)

Но если я перенаправляю STDERR в STDOUT, я получаю сообщение об ошибке перед выводом, чего мне не нужно:

ruby -e "puts 'one'; raise 'two'" 2>&1 | cat
-e:1:in `<main>': two (RuntimeError)
one

Я хочу перенаправить вывод в текстовый файл (он ведет себя так же, как cat выше) и получите как вывод, так и исключения, но в том же порядке, что и при просмотре вывода в моем терминале. Можно ли этого достичь?

6
задан Henrik N 17 January 2012 в 20:47
поделиться