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

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

Есть ли способ без использования какого-либо программного обеспечения? Я хотел бы знать, как.

370 голосов | спросил led-Zepp 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 23:49:07 +0400000000pmFri, 14 Feb 2014 23:49:07 +040014 2014, 23:49:07

7 ответов


374

Да, возможно, просто перенаправить вывод в файл:

someCommand> somefile.txt

Или если вы хотите добавить данные:

someCommand>>> somefile.txt

Если вы хотите stderr также использовать это:

someCommand>> somefile.txt

или это добавить:

someCommand>>>>>>>>>> somefile.txt
ответил Seth 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 23:52:13 +0400000000pmFri, 14 Feb 2014 23:52:13 +040014 2014, 23:52:13
502

Чтобы записать вывод команды в файл, в основном используются 10 обычно используемых способов.

Обзор:

  

Обратите внимание, что n.e. в столбце синтаксиса означает «не существует».
  Есть способ, но слишком сложно вписаться в столбец. Вы можете найти полезную ссылку в разделе «Список».

|| видимый в терминале || видимый в файле || существующий
  Синтаксис || StdOut | StdErr || StdOut | StdErr || файл
========== ========== ++ + ++ ========== ========== + ==== ====== ++ ===========
    > || нет | да || да | нет || затирать
    > > || нет | да || да | нет || присоединять
          || | || | ||
   2 > || да | нет || нет | да || затирать
   2 > > || да | нет || нет | да || присоединять
          || | || | ||
   & Amp; > || нет | нет || да | да || затирать
   & Amp; > > || нет | нет || да | да || присоединять
          || | || | ||
 | tee || да | да || да | нет || затирать
 | tee -a || да | да || да | нет || присоединять
          || | || | ||
 Новая Англия (*) || да | да || нет | да || затирать
 Новая Англия (*) || да | да || нет | да || присоединять
          || | || | ||
| & Амп; tee || да | да || да | да || затирать
| & Амп; tee -a || да | да || да | да || присоединять

Список:

  • command> output.txt

    Стандартный выходной поток будет перенаправлен только на файл, он не будет виден в терминале. Если файл уже существует, он перезаписывается.

  • command>>> output.txt

    Стандартный выходной поток будет перенаправлен только на файл, он не будет виден в терминале. Если файл уже существует, новые данные будут добавлены в конец файла.

  • команда 2> output.txt

    Стандартный поток ошибок будет перенаправлен только в файл, он не будет отображаться в терминале. Если файл уже существует, он перезаписывается.

  • команда 2> output.txt

    Стандартный поток ошибок будет перенаправлен только в файл, он не будет отображаться в терминале. Если файл уже существует, новые данные будут добавлены в конец файла.

  • command & gt; output.txt

    Как стандартный вывод, так и стандартный поток ошибок будут перенаправлены только на файл, в терминале ничего не будет видно. Если файл уже существует, он перезаписывается.

  • команда>>>>>>>>> output.txt

    Как стандартный вывод, так и стандартный поток ошибок будут перенаправлены только на файл, в терминале ничего не будет видно. Если файл уже существует, новые данные будут добавлены в конец файла.

  • команда | tee output.txt

    Стандартный выходной поток будет скопирован в файл, он все равно будет виден в терминале. Если файл уже существует, он перезаписывается.

  • команда | tee -a output.txt

    Стандартный выходной поток будет скопирован в файл, он все равно будет виден в терминале. Если файл уже существует, новые данные будут добавлены в конец файла.

  • (*)

    Bash не имеет сокращенного синтаксиса, который позволяет только StdErr связывать только вторую команду, которая понадобится здесь в сочетании с tee снова для завершения таблицы. Если вам действительно нужно что-то подобное, просмотрите «Как подключить stderr, а не stdout?» на переполнение стека для некоторых способов, как это можно сделать, например. путем обмена потоками или с помощью замены процесса.

  • команда | & tee output.txt

    Как стандартный вывод, так и стандартные потоки ошибок будут скопированы в файл, пока они все еще видны в терминале. Если файл уже существует, он перезаписывается.

  • команда | & tee -a output.txt

    Как стандартный вывод, так и стандартные потоки ошибок будут скопированы в файл, пока они все еще видны в терминале. Если файл уже существует, новые данные будут добавлены в конец файла.

ответил Byte Commander 8 FebruaryEurope/MoscowbMon, 08 Feb 2016 17:52:34 +0300000000pmMon, 08 Feb 2016 17:52:34 +030016 2016, 17:52:34
79

Вы также можете использовать tee для отправки вывода в файл:

команда | tee ~ /outputfile.txt

Небольшая модификация также поймает stderr:

команда 2 & 1 | tee ~ /outputfile.txt

или немного короче и менее сложно:

command | & tee ~ /outputfile.txt

tee полезен, если вы хотите иметь возможность выводить команду вывода, а также просматривать ее в реальном времени .

ответил Aaron 20 J0000006Europe/Moscow 2014, 08:45:53
17

Вы можете перенаправить вывод команды в файл:

your_command> /path /to /file

Чтобы добавить выходной файл команды в файл вместо его перезаписи, используйте:

your_command>> /путь /в /файл
ответил chaos 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 23:52:09 +0400000000pmFri, 14 Feb 2014 23:52:09 +040014 2014, 23:52:09
11

Усиление рассмотрения -

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

Чтобы исправить это, вы можете использовать программу sed , чтобы вычеркнуть эти коды. Пример:

команда 2 & 1 | sed -r 's /' $ (echo -e "\ 033") '\ [[0-9] {1,2} (; ([0-9] {1,2})?)? [mK] //g '| tee ~ /outputfile.txt
ответил Sean Huber 9 J000000Wednesday14 2014, 00:57:02
1

Задания cron и т. д. вы хотите избежать расширений Bash. Эквивалентные операторы перенаправления POSIX sh:

Bash POSIX
-------------- --------------
foo> бар foo> бар 2> 1
foo>>>>> bar foo> bar 2 & 1
foo | & bar foo 2 & 1 | бар

Вы заметите, что объект POSIX в некотором смысле более простой и понятный. Синтаксис > был заимствован из csh, который уже должен был убедить вас, что это плохая идея.

ответил tripleee 11 PMpWed, 11 Apr 2018 15:25:38 +030025Wednesday 2018, 15:25:38
0

some_command | tee command.log и some_command> command.log есть проблема, что они не сохраняют вывод команды в файл command.log в режиме реального времени.

Чтобы избежать этой проблемы и сохранить вывод команды в режиме реального времени, вы можете добавить unbuffer, который поставляется с пакетом expect.


Пример:

sudo apt-get install ожидать
unbuffer some_command | tee command.log
unbuffer some_command> command.log

Предполагая, что log.py содержит:

время импорта
печать ( «тестирование»)
time.sleep (100) # спать 100 секунд

вы можете запустить unbuffer python log.py | tee command.log или unbuffer python log.py> gt; command.log

Дополнительная информация: Как сохранить вывод команды в файл в режиме реального времени?

ответил Franck Dernoncourt 4 J000000Wednesday18 2018, 23:54:00

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132