Почему вывод некоторых программ 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 / нуль ,
Какой выходной поток использует время, и как я могу передать его в файл?
Один из способов обойти проблему - создать удар сценарий, например, combine.sh
содержащий эту команду:
$@ 2>&1
Тогда вывод «времени» может быть записан правильным образом:
combine.sh time sleep 1 &> /dev/null
(ничего не видно - правильно)
Есть ли способ достичь того, чего я хочу, без использования отдельного сценария объединения?
2>&1 > /dev/null
означает «2 теперь идет туда, куда идет 1 (т. е. к терминалу по умолчанию), а затем 1 теперь переходит в / dev / null (но 2 по-прежнему идет к терминалу!). use>/dev/null 2>&1
сказать "1 теперь идет в / dev / null, затем 2 идет туда, где 1 идет (то есть также в / dev / null). Это все равно не сработает, поскольку встроенное время не будет перенаправлено, но в целом правильно (например, это будет работать, если вы используете / usr / bin / time). Думайте о "2 & gt; & amp; 1" как о копировании "направления" 1 в 2, а не как 2, переходящее к 1