Как я могу перенаправить вывод 'времени' и управлять выводом к тому же каналу?

Почему наклон Вы используете fedup или предварительно обновляете сопровождаемый обновлением? Это методы стандартного обновления.

Обновление Fedora = fedup.

24
09.02.2016, 01:46
3 ответа

Если я понимаю, о чем вы просите, то это подойдет. Я использую команды ls ~ и tee в качестве запасных для . /foo и bar, но общая форма того, что вы хотите, такова:

$ ( time ./foo ) |& bar

NOTE: Вывод time уже присоединяется в конце любого вывода из ./foo, он просто делается это на STDERR. Чтобы перенаправить его через трубу, вам нужно объединить STDERR с STDOUT. Для этого можно использовать либо |&, либо 2>&1.

$ ( time ./foo ) |& bar

-or-

$ ( time ./foo ) 2>&1 | bar

Пример

$ ( time ls . ) |&  tee cmd.log
cmd.log
file1
file2
file3
file4
file5

real    0m0.005s
user    0m0.000s
sys     0m0.001s

А вот содержимое файла cmd.log, созданного командой tee.

$ more cmd.log 
cmd.log
file1
file2
file3
file4
file5

real    0m0.005s
user    0m0.000s
sys     0m0.001s
30
27.01.2020, 19:41

Я обнаружил, что это работает в Solaris. (time ls) &> file

0
27.01.2020, 19:41

time по умолчанию отправляет вывод на stderr вместо stdout. Вам просто нужно перенаправить его туда, куда вы хотите.

Вы говорите "С другой стороны, если бы я хотел time foo, и перенаправить вывод time, я мог бы написать, time (./foo) | bar." но это неверно. В этом случае вывод time все равно будет отображаться на консоли, только stdout будет перенаправлен.

Вы можете перенаправить stderr специально с помощью:

(time foo) 2>&1 | bar

или все трубы с помощью:

(time foo) |& bar

Скобки необходимы, чтобы это работало правильно.

9
27.01.2020, 19:41

Теги

Похожие вопросы