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

298

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

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

    
задан led-Zepp 14.02.2014 в 20:49
источник

5 ответов

304

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

someCommand > someFile.txt  

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

someCommand >> someFile.txt

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

someCommand &> someFile.txt  

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

someCommand &>> someFile.txt  
    
ответ дан Seth 14.02.2014 в 20:52
источник
371

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

Обзор:

  

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

          || visible in terminal ||   visible in file   || existing
  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   
==========++==========+==========++==========+==========++===========
    >     ||    no    |   yes    ||   yes    |    no    || overwrite
    >>    ||    no    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
   2>     ||   yes    |    no    ||    no    |   yes    || overwrite
   2>>    ||   yes    |    no    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
   &>     ||    no    |    no    ||   yes    |   yes    || overwrite
   &>>    ||    no    |    no    ||   yes    |   yes    ||  append
          ||          |          ||          |          ||
 | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite
 | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
|& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite
|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

Список:

  • command > output.txt

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

  • command >> output.txt

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

  • command 2> output.txt

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

  • command 2>> output.txt

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

  • command &> output.txt

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

  • command &>> output.txt

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

  • command | tee output.txt

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

  • command | tee -a output.txt

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

  • (*)

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

  • command |& tee output.txt

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

  • command |& tee -a output.txt

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

ответ дан Byte Commander 08.02.2016 в 15:52
70

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

command | tee ~/outputfile.txt

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

command 2>&1 | tee ~/outputfile.txt

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

command |& tee ~/outputfile.txt

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

    
ответ дан Aaron 20.06.2014 в 06:45
15

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

your_command >/path/to/file

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

your_command >>/path/to/file
    
ответ дан chaos 14.02.2014 в 20:52
10

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

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

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

command 2>&1 | sed -r 's/'$(echo -e "3")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
    
ответ дан Sean Huber 08.07.2014 в 22:57