Как перенаправить вывод из / dev / null - PullRequest
5 голосов
/ 24 марта 2010

У меня есть приложение, которое запускает команду, как показано ниже:

<command> <switches> >& /dev/null

Я могу настроить <command>, но у меня нет контроля над <switches>. Все выходные данные, сгенерированные этой командой, отправляются на /dev/null. Я хочу, чтобы вывод был виден на экране или перенаправлен в файл журнала.

Я пытался использовать freopen() и связанные с ним функции, чтобы открыть /dev/null для другого файла, но не смог заставить его работать.

У вас есть другие идеи? Возможно ли это вообще?

Спасибо за ваше время.

PS: я работаю в Linux.

Ответы [ 12 ]

0 голосов
/ 24 марта 2010

В Perl, если вы просто хотите перенаправить STDOUT на что-то более полезное, вы можете просто сделать что-то вроде:

open STDOUT, '>>', '/var/log/myscript.log';
open STDERR, '>>', '/var/log/myscript.err';

в начале вашего скрипта, и это перенаправит его для остальной части вашего скрипта.

0 голосов
/ 24 марта 2010

РЕДАКТИРОВАТЬ: Это НЕ хорошая идея и, конечно, не стоит пытаться, если вы не знаете, что это может сломать. Это работает для меня, может работать и для вас.

Хорошо, это действительно плохой взлом и, вероятно, не стоит делать. Предполагая, что ни одна из других команд не работает, и у вас просто нет доступа к двоичному файлу / приложению (которое содержит команду с /dev/null), и вы не можете перенаправить вывод в другой файл (заменив /dev/null).

Затем вы можете удалить / dev / null ($> rm /dev/null) и создать свой собственный файл на его месте (желательно с мягкой ссылкой), куда могут быть направлены все данные. Когда вы закончите, вы можете создать / dev / null еще раз, используя следующую команду:

$> mknod -m 666 /dev/null c 1 3

Просто чтобы прояснить ситуацию, это плохой хак и, безусловно, для работы требуются права доступа root . Высокая вероятность того, что ваш перенаправленный файл может содержать данные из многих других приложений / исполняемых файлов, которые используют /dev/null в качестве приемника.

...