Подтвердить что ты не робот

Linux (Bash): перенаправить все выходные данные в файл

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

Подобные симптомы описаны здесь:

Перенаправить все выходные данные в файл

Однако я пробовал предлагаемое решение (capture stderr) без успеха:

<cmd> <args> > stdout.txt 2> stderr.txt

Файл stderr.txt создается, но пуст.

Возможная подсказка заключается в том, что программа командной строки является клиентом, взаимодействующим с сервером на том же компьютере. Возможно, что некоторые из результатов поступают с сервера .

Есть ли способ захватить весь вывод с терминала, независимо от его происхождения?

EDIT:

Я подтвердил, что отсутствующий вывод генерируется сервером. Выполнение команды в отдельном терминале вызывает некоторый вывод в обоих терминалах, я могу передать весь вывод из командной строки в файл. Это вызывает проблемы, связанные с захватом вывода сервера, но это другой вопрос.

4b9b3361

Ответ 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

Ответ 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