2013-11-07 3 views
4

Я новичок в оболочке linux и стараюсь сделать это, желательно в одной строке, со следующим условием: он не может выводить ничего на терминал.ответ команды grep молча

/var/folder/program.exe -L parameters | grep text_to_filter && echo SomeText >'/tmp/Log.txt' 

Проблема .exe выплескивает данные XML на терминал. Я не могу понять, как это сделать, и не выводить его. Если я использую /dev/null 2>&1, он полностью его пробит, но тогда я не могу grep данные. Есть идеи?

+0

Что вы пытаетесь сделать с данными после попытки его grep? –

+0

рассмотрите возможность редактирования вопроса, чтобы включить нужный вывод в файл '/ tmp'. Удачи. – shellter

ответ

5

Использование grep -q (тихо)

/var/folder/program.exe -L parameters | grep -q "text_to_filter" && echo 'SomeText' > '/tmp/Log.txt' 

По man grep:

-q, --quiet, --silent Quiet; не пишите ничего на стандартный вывод. Выйдите немедленно с нулевым статусом, если найдено совпадение, даже если была обнаружена ошибка . Также см. параметр -s или --no-messages.

+0

Это не работает для меня. Я знаю, что program.exe выводит ответ на терминал, поэтому ему не нужно его прокладывать где-то, например nul или файл, прежде чем я grep? – Nimjox

+0

Да, я набрал его так же, как вы предлагали, но он все еще показывает вывод на терминал – Nimjox

+0

Итак, попробуйте следующее: '/var/folder/program.exe -L parameters 2>/dev/null | grep -q "text_to_filter" && echo 'SomeText'> '/ tmp/Log.txt'' – anubhava

0

Попробуйте использовать | &, а не просто |. (требуется bash 4)

Смежные вопросы