Как перенаправить вывод на экран, а также файл?

9

Моя цель - записать все выходные данные из сценария в каталог, который будет создавать сценарий.

Например, у меня есть:

~/.abc.sh :

#! /bin/bash
rails new myapp

Когда я запускаю ...

cd ~/code
. ~/.abc.sh

..., который создаст новое приложение Rails в каталоге ~/code/myapp .

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

Как мне это сделать?

    
задан Zabba 29.04.2011 в 18:15
источник

1 ответ

19

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

command | tee /path/to/logfile

Эквивалент без записи в оболочку будет:

command > /path/to/logfile

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

command | tee -a /path/to/logfile

Обратите внимание, что труба будет выходить только на stdout, ошибки в stderr не обрабатываются трубой с tee . Если вы хотите регистрировать ошибки (из stderr), используйте:

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

Это означает: запустите command и перенаправьте поток stderr (2) в stdout (1). Это будет передано в трубку с помощью приложения tee .

    
ответ дан Lekensteyn 29.04.2011 в 18:16
источник