2010-07-09 2 views
18

У меня есть несколько сценариев, где мне нужно, чтобы увидеть выход и войти результат в файл с самым простым примером является:Как регистрировать вывод в bash и видеть его в терминале одновременно?

$ update-client > my.log 

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

ответ

34
update-client 2>&1 | tee my.log 

2> & 1 перенаправляет стандартную ошибку в стандартный вывод, и тройник посылает свой стандартный ввод в стандартный вывод и файл.

+1

Вы также можете добавить файл журнала, как описано здесь, и делать другие материалы с тройника: http://linux.101hacks.com/unix/tee-command- примеры/ – thegeek

4

Просто используйте хвост, чтобы посмотреть файл по мере его обновления. Фоновая исходный процесс добавления & после вышеуказанной команды После выполнения команды выше просто использовать

$ tail -f my.log 

Он будет постоянно обновлять. (обратите внимание, что он не скажет вам, когда файл завершит работу, чтобы вы могли вывести что-то в журнал, чтобы сообщить вам об этом. Ctrl-c для выхода из хвоста)

+2

вау жесткая толпа на этом. Что именно не так с этим ответом? – Cfreak

+2

Это в тысячи раз хуже, чем использование 'tee' на мой взгляд. –

+0

Требуется: Я запускаю процесс в фоновом режиме –

4

другой вариант заключается в использовании блочного вывода на выходе изнутри сценарий (не уверен, что это правильный технический термин).

Пример

#!/bin/bash 
{ 
    echo "I will be sent to screen and file" 
    ls ~ 
} 2>&1 | tee -a /tmp/logfile.log 

echo "I will be sent to just terminal" 

Я хотел бы иметь больше контроля и гибкости - так что я предпочитаю этот путь.

+0

спасибо, это сработало безупречно – wiak

2

Вы можете использовать команду тройник для этого:

command | tee /path/to/logfile 

equivelent без записи оболочки будет:

command > /path/to/logfile 

Если вы хотите добавить (>>) и показать выход в оболочке, используйте опцию -a:

command | tee -a /path/to/logfile 

Пожалуйста, обратите внимание, что труба будет ловить только стандартный вывод, ошибки в StD err не обрабатываются трубой с тройником. Если вы хотите, чтобы регистрировать ошибки (от STDERR), использование:

command 2>&1 | tee /path/to/logfile 

Это означает: команды запуска и перенаправить поток STDERR (2) на стандартный вывод (1). Это будет передано трубе с тие-приложением.

Узнайте об этом на сайте askubuntu