Как сохранить вывод команды в файл?
Есть ли способ без использования какого-либо программного обеспечения? Я хотел бы знать, как.
Как сохранить вывод команды в файл?
Есть ли способ без использования какого-либо программного обеспечения? Я хотел бы знать, как.
Ответы:
Да, это возможно, просто перенаправить вывод в файл:
SomeCommand > SomeFile.txt
Или, если вы хотите добавить данные:
SomeCommand >> SomeFile.txt
Если вы также хотите stderrиспользовать это:
SomeCommand &> SomeFile.txt
или это добавить:
SomeCommand &>> SomeFile.txt
если вы хотите, чтобы stderrи консоль, и вывод отображались на консоли и в файле, используйте это:
SomeCommand 2>&1 | tee SomeFile.txt
(Если вы хотите только вывод, опустите 2выше)
makeкоманды в файл, вместо этого требуется следующий синтаксис: make > someFile.txt 2>&1(источник: linuxquestions.org/questions/linux-newbie-8/… )
Чтобы записать вывод команды в файл, существует в основном 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
Как стандартный вывод, так и стандартные потоки ошибок будут скопированы в файл, пока они будут видны в терминале. Если файл уже существует, новые данные будут добавлены в конец файла.
2>&1перенаправляет STDERR в STDOUT, 1>&2перенаправляет STDOUT в STDERR и 3>&1перенаправляет поток 3 в STDERR.
sh: 1: Syntax error: "&" unexpectedпри использовании |& teeиз скрипта Python на сервере c9.io. Кажется, используется другая оболочка. echo $SHELLпоказывает /bin/bashи $SHELL --versionпоказывает версию 4.3.11 (1) -релиз. Я пробовал #!/bin/bashв своем скрипте Python, но я все еще получаю sh: 1: Syntax error. Я получил то, что мне было нужно, поэтому я разочаровался в сортировке странностей между shи bashна моем сервере. Благодарю.
shа не bash(или, может быть, bashв shрежиме ...). Вы можете проверить, что именно использует ваш текущий процесс оболочки ps -p $$ -o cmd=, потому что echo $SHELLон ненадежен и покажет вам вашу оболочку входа в систему, игнорируя, возможно, вы запустили другую подоболочку.
Вы также можете использовать teeдля отправки вывода в файл:
command | tee ~/outputfile.txt
Небольшая модификация также поймает stderr:
command 2>&1 | tee ~/outputfile.txt
или немного короче и менее сложный:
command |& tee ~/outputfile.txt
teeполезно, если вы хотите иметь возможность записывать вывод команды, а также просматривать ее в режиме реального времени .
2>&1?
Вы можете перенаправить вывод команды в файл:
your_command >/path/to/file
Чтобы добавить вывод команды в файл вместо перезаписи, используйте:
your_command >>/path/to/file
Улучшение, чтобы рассмотреть -
Различные сценарии будут вводить цветовые коды в вывод, который может не захламлять ваш файл журнала.
Чтобы это исправить, вы можете использовать программу sed для удаления этих кодов. Пример:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
lsи grep, поддерживают --color=auto, который выводит цветовые коды, только если стандартный вывод является терминалом.
Для cronработы и т. Д. Вы хотите избежать расширений Bash. Эквивалентные shоператоры перенаправления POSIX
Bash POSIX
------------ --------------
foo &> bar foo >bar 2>&1
foo &>> bar foo >>bar 2>&1
foo |& bar foo 2>&1 | bar
Вы заметите, что средство POSIX в некотором смысле проще и понятнее. &>Синтаксис заимствован из cshкоторых уже должен убедить вас , что это плохая идея.
some_command | tee command.logи some_command > command.logпроблема в том, что они не сохраняют вывод команды в command.logфайл в режиме реального времени.
Чтобы избежать этой проблемы и сохранить вывод команды в режиме реального времени, вы можете добавить unbuffer, который поставляется с expectпакетом.
Пример:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
Предполагая, log.pyсодержит:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
ты можешь бежать unbuffer python log.py | tee command.logилиunbuffer python log.py > command.log
Дополнительная информация: Как я могу сохранить вывод команды в файл в режиме реального времени?
someCommand 2> someFile.txtиsomeCommand 2>> someFile.txtтакже перенаправляетstterrна someFile.txt