Почему вывод некоторых программ Linux не идет ни в STDOUT, ни в STDERR?
На самом деле, я хочу знать, как надежно фиксировать весь вывод программы, независимо от того, какой «поток» он использует. У меня проблема в том, что некоторые программы, кажется, не позволяют захватывать их вывод.
Примером является команда time:
time sleep 1 2>&1 > /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
или же
time sleep 1 &> /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
Почему я вижу результат оба раза? Я ожидал, что все это будет передано в /dev/null.
Какой выходной поток использует время, и как я могу передать его в файл?
Один из способов обойти эту проблему - создать скрипт Bash , например, combine.sh
содержащий эту команду:
$@ 2>&1
Тогда вывод «времени» может быть записан правильным образом:
combine.sh time sleep 1 &> /dev/null
(ничего не видно - правильно)
Есть ли способ достичь того, что я хочу, без использования отдельного сценария объединения?