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

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

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

~/.abc.sh:

#! /bin/bash
rails new myapp

Когда я бегу ...

cd ~/code
. ~/.abc.sh

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

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

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

11
задан 8 September 2016 в 10:21

2 ответа

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

command | tee /path/to/logfile

equivelent, не пишущий в оболочку был бы:

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 приложение.

22
ответ дан 8 September 2016 в 10:21

script запустит интерактивную сессию и зарегистрирует весь вывод (stdout/stderr и т.д.) в файл, или (с -c параметр), выполнит команду и зарегистрирует вывод этого.

script -c ~/.abc.sh -f abc.log

Примечание: на интерактивной сессии можно прекратить записывать только путем выхода из сессии, как Вы обычно были бы (например. exit или Ctrl-D).

Для записи сессии с воспроизведением видео можно также попробовать asciinema.

0
ответ дан 23 November 2019 в 03:55

Другие вопросы по тегам:

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