Как автоматически сохранить вывод команды терминала в файл

Есть ли способ сохранить вывод команды терминала в файл без необходимости писать команду ' | 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.

После всего сказанного вы могли бы написать сценарий для переноса команд с этим перенаправлением, но он все равно не спасет вас от большого количества нажатий клавиш.

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