Как автоматически сохранить вывод команды терминала в файл
Есть ли способ сохранить вывод команды терминала в файл без необходимости писать команду ' | tee /abc.txt'каждый раз?
3 ответа
Одним из вариантов является использование script
программа
NAME
script — make typescript of terminal session
SYNOPSIS
script [-a] [-c command] [-e] [-f] [-q] [-t[=file]] [-V] [-h] [file]
DESCRIPTION
script makes a typescript of everything printed on your terminal. It is
useful for students who need a hardcopy record of an interactive session
as proof of an assignment, as the typescript file can be printed out
later with lpr(1).
Обратите внимание, что script
сохраняет все в терминале (а не только вывод команды), включая цветовые последовательности ANSI, что может затруднить извлечение простого текста из результирующего файла в случае цветных терминалов.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:
Следующее - только идея, могут быть ошибки, которые я не знаю, связанные с использованием этого
Похоже на предложение @MomentumMori о создании tee
-d bash subshell, если вы хотите поработать с перенаправлениями, вы, вероятно, можете сделать что-то вроде
exec 3>&1
чтобы сохранить текущий стандартный дескриптор выходного файла, затем
exec 1> >(tee -a outfile)
С этого момента стандартный вывод перенаправляется на tee
подпроцесс, который добавляет все к outfile
, Поскольку мы не перенаправили поток вывода подпроцесса, копия вывода команды все еще появляется в терминале.
Как только вы закончите с командами, чей вывод вы хотите захватить, вы можете отменить перенаправление и закрыть временный файловый дескриптор
exec 1>&3 3>&-
после чего вы можете посмотреть в outfile
чтобы увидеть результаты команд
cat outfile
Да.
использование tee
на вашем терминале.
$ bash | tee /abc.txt
объяснение
bash
запустит другую оболочку внутри той, которую вы сейчас используете. Это будет выглядеть так, будто ничего не произошло, но, если вы попытаетесь закрыть терминал, вам будет предложено что-то вроде:There is still a process running in this terminal. Closing the terminal will kill it.
Этот процесс, это
bash
, Он будет читать вашу команду, как ваша другая оболочка, без каких-либо проблем, потому что ваша первая оболочка, скорее всего, уже запущенаbash
тоже. Это просто пример. Есть другие оболочки, и вы можете узнать о них здесь: [Рецензент, вставьте ссылку 1 здесь]Когда вы закончите, вы можете ввести
exit
закрыть это.|
это символ, используемый для представления труб. М. Джексон объясняет, что они здесь: http://www.dsj.net/compedge/shellbasics1.htmlТрубы. Философия UNIX призывает к использованию небольших, но в то же время очень сфокусированных программ, которые можно использовать вместе для выполнения сложных задач. Итак, изучение того, как связать воедино несколько небольших команд в командной строке, является неотъемлемой частью удобства работы с Bash. Для этого мы направляем стандартный вывод одной программы на стандартный ввод другой программы, но мы не используем перенаправители, мы используем оператор канала ``|''. В UNIX процессы, соединенные каналами, динамически выполняются вместе, когда между ними проходят потоки данных.
- А также
tee
, для полноты картины: [Рецензент, вставьте ссылку 2 здесь][читает] из стандартного ввода и записи в стандартный вывод и файлы
bash
(точнее вывод команд, выполняемых внутри него) будет передан tee
как его вход. Эффективно устраняя необходимость использования | tee /abc.txt
после каждой из ваших команд, чтобы увидеть их вывод на оболочке, а также сохранить его в вашей файловой системе.
Нет.
Это связано с тем, как работают сокеты, называемые "стандартным вводом" и "стандартным выводом", а также с общей философией Unix/Linux "Делай что-то и делай хорошо". Возможно, вы захотите потратить минуту или две, чтобы понять http://www.tldp.org/LDP/abs/html/io-redirection.html.
После всего сказанного вы могли бы написать сценарий для переноса команд с этим перенаправлением, но он все равно не спасет вас от большого количества нажатий клавиш.