Как сохранить вывод команды в файл?
Есть ли способ без использования какого-либо программного обеспечения? Я хотел бы знать, как.
command-line
Светодиодное Zepp
источник
источник
someCommand 2> someFile.txt
иsomeCommand 2>> someFile.txt
также перенаправляетstterr
на someFile.txtmake
команды в файл, вместо этого требуется следующий синтаксис:make > someFile.txt 2>&1
(источник: linuxquestions.org/questions/linux-newbie-8/… )Чтобы записать вывод команды в файл, существует в основном 10 часто используемых способов.
Обзор:
Список:
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
для отправки вывода в файл:Небольшая модификация также поймает stderr:
или немного короче и менее сложный:
tee
полезно, если вы хотите иметь возможность записывать вывод команды, а также просматривать ее в режиме реального времени .источник
2>&1
?Вы можете перенаправить вывод команды в файл:
Чтобы добавить вывод команды в файл вместо перезаписи, используйте:
источник
Улучшение, чтобы рассмотреть -
Различные сценарии будут вводить цветовые коды в вывод, который может не захламлять ваш файл журнала.
Чтобы это исправить, вы можете использовать программу sed для удаления этих кодов. Пример:
источник
ls
иgrep
, поддерживают--color=auto
, который выводит цветовые коды, только если стандартный вывод является терминалом.Для
cron
работы и т. Д. Вы хотите избежать расширений Bash. Эквивалентныеsh
операторы перенаправления POSIXВы заметите, что средство POSIX в некотором смысле проще и понятнее.
&>
Синтаксис заимствован изcsh
которых уже должен убедить вас , что это плохая идея.источник
some_command | tee command.log
иsome_command > command.log
проблема в том, что они не сохраняют вывод команды вcommand.log
файл в режиме реального времени.Чтобы избежать этой проблемы и сохранить вывод команды в режиме реального времени, вы можете добавить
unbuffer
, который поставляется сexpect
пакетом.Пример:
Предполагая,
log.py
содержит:ты можешь бежать
unbuffer python log.py | tee command.log
илиunbuffer python log.py > command.log
Дополнительная информация: Как я могу сохранить вывод команды в файл в режиме реального времени?
источник