Linux (Bash): перенаправить все выходные данные в файл
Я пытаюсь перенаправить весь вывод из командной строки в файл. Я использую Bash. Некоторые из результатов направлены на файл, но некоторые все еще отображаются в терминале и не сохраняются в файле.
Подобные симптомы описаны здесь:
Перенаправить все выходные данные в файл
Однако я пробовал предлагаемое решение (capture stderr) без успеха:
<cmd> <args> > stdout.txt 2> stderr.txt
Файл stderr.txt создается, но пуст.
Возможная подсказка заключается в том, что программа командной строки является клиентом, взаимодействующим с сервером на том же компьютере. Возможно, что некоторые из результатов поступают с сервера .
Есть ли способ захватить весь вывод с терминала, независимо от его происхождения?
EDIT:
Я подтвердил, что отсутствующий вывод генерируется сервером. Выполнение команды в отдельном терминале вызывает некоторый вывод в обоих терминалах, я могу передать весь вывод из командной строки в файл. Это вызывает проблемы, связанные с захватом вывода сервера, но это другой вопрос.
Ответы
Ответ 1
Если сервер запущен на том же терминале, то это сервер stderr, который предположительно записывается на терминал и который вы не захватываете.
Лучшим способом захвата всего будет запуск:
script output.txt
перед запуском либо сервера, либо клиента. Это запустит новую оболочку со всеми выводами терминала, перенаправленными с output.txt, а также с терминалом. Затем запустите сервер из этой новой оболочки, а затем из клиента. Все, что вы видите на экране (как ваш вход, так и вывод всего, что записывается на терминал из этой оболочки) будет записано в файл.
Когда вы закончите, введите "exit", чтобы выйти из оболочки, выполняемой командой script
.
Ответ 2
вы можете использовать этот синтаксис для перенаправления всех выходных stderr и stdout на stdout.txt
<cmd> <args> > allout.txt 2>&1
Ответ 3
Хотя не POSIX, bash 4 имеет оператор &>
:
command &> alloutput.txt
Ответ 4
Вы можете выполнить подоболочку и перенаправить весь вывод, оставив процесс в фоновом режиме:
( ./script.sh blah > ~/log/blah.log 2>&1 ) &
echo $! > ~/pids/blah.pid
Ответ 5
Правильный ответ здесь: http://scratching.psybermonkey.net/2011/02/ssh-how-to-pipe-output-from-local-to.html
your_command | ssh [email protected] "cat > filename.txt"
Ответ 6
У меня возникли проблемы с программой сбой * кашель с кашлем PHP * При столкновении с оболочкой он запущен в сообщениях о причине сбоя, Segmentation fault (core dumped)
Чтобы этот выход не регистрировался, команда может быть запущена в подоболочке, которая будет захватывать и направлять такой вывод:
sh -c 'your_command' > your_stdout.log 2> your_stderr.err
# or
sh -c 'your_command' > your_stdout.log 2>&1