Моя цель - записать все выходные данные скрипта в каталог, который скрипт создаст.
Например, у меня есть:
~/.abc.sh
:
#! /bin/bash
rails new myapp
Когда я бегу ...
cd ~/code
. ~/.abc.sh
... это создаст новое приложение Rails в каталоге ~/code/myapp
.
Когда Rails создает приложение, оно выводит много текста, который я хочу записать и сохранить в файле журнала в том же каталоге, что и команда rails
, созданная недавно. Я также хочу отобразить этот текст в терминале.
Как мне это сделать?
Можно использовать 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
приложение.
script
запустит интерактивную сессию и зарегистрирует весь вывод (stdout/stderr и т.д.) в файл, или (с -c
параметр), выполнит команду и зарегистрирует вывод этого.
script -c ~/.abc.sh -f abc.log
Примечание: на интерактивной сессии можно прекратить записывать только путем выхода из сессии, как Вы обычно были бы (например. exit
или Ctrl-D).
Для записи сессии с воспроизведением видео можно также попробовать asciinema.