2010-12-16 1 views
8

В Linux я пытаюсь перенаправить stdout из консольного приложения в файл вместо консоли. У меня нет исходного кода. Я пробовал несколько методов, но все приводило к пустым файлам. Без перенаправления вывода все работает нормально (я вижу консольные сообщения).Перенаправление вывода не работает для определенной программы

Я пытался, например:

progname > out.txt 
progname > out.txt 2&>1 

И ничто не появляется в out.txt и в консоли.

Я попытался запустить приложение с strace. Когда я не использовать перенаправление, я вижу линии, такие как -

write(1, "bla bla", 8) 

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

Я использую CentOS 5.5 и Bash.

ответ

5

Основываясь на вашей strace, это звучит так, как если бы программа тестировала, если stdin и/наша stdout - это tty. Я никогда не использовал его, но вы можете попробовать использовать empty.sourceforge.net. Предполагается создать псевдо-tty, который должен обмануть проверку вашей программы.

+0

Спасибо! он работает - empty -f -L out.txt progname – kshahar 2010-12-16 10:17:26

9
progname > out.txt 2>&1 

Edit: Если вы на самом деле сделал это, и это была опечатка в вашем вопросе. Возможно, приложение проверяет, является ли вывод TTY.

Edit2: Хорошо, в таком случае, попробуйте script -qc progname > out.txt > 2>&1

В Debian/Ubuntu, script является частью bsdutils пакета, который является Essential пакет и всегда установлен.

+0

Правильно, есть опечатка в вопросе. Но в любом случае, я знаю, что приложение использует stdout. Как я могу получить выходное сообщение, если он проверяет TTY? – kshahar 2010-12-16 09:27:32

1

Попытка перенаправить один поток на время/DEV/нуль, чтобы видеть, какой он печатает на:

progname > /dev/null 
progname 2> /dev/null 

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