Почему grep не работает с перенаправлением?

Да, можно сделать это.

Необходимо изучить dnsmasq. Это разработано для удовлетворения этой самой потребности.

Сервером DHCP по умолчанию на Linux обычно является ISC dhcpd. Возможно заставить его работать в этой роли также, но немного более трудно настроить, и это должно быть вручную настроено для получения интеграции сервера DNS, которую Вы получаете бесплатно с dnsmasq.

15
26.09.2012, 22:34
5 ответов

Я получаю то же поведение, которое Вы описываете. На Ubuntu 11.10

top | grep "my_program" > top.log

не производит вывода.

Я полагаю, что причина этого состоит в том, что grep буферизует свой вывод. Чтобы сказать GNU grep выкладывать вывод линию за линией, используйте --line-buffered опция:

top | grep --line-buffered "my_program" > top.log

См. также это ТАК вопрос для других потенциальных решений.

22
27.01.2020, 19:49
  • 1
    +1 --line-buffered решает проблему. –   26.09.2012, 23:01
  • 2
    Спасибо, это решает проблему для меня, также. -b опция является все еще хорошим советом от Lev Levitsky, также. Это решило некоторые проблемы кодирования с файлом журнала. –   26.09.2012, 23:08

необходимо использовать:

top -n 1 | grep "blah" > top.log

вершина выполнений "-n 1" для одного повторения и затем выходит вместо того, чтобы постоянно обновить каждые несколько секунд

так как Вы просто ищете одну строку, хотя PS был бы лучшим инструментом для использования.

2
27.01.2020, 19:49

Попробуйте это:

top | grep "my_program" 2>&1 > top.log

Какие средства 2>&1?

0
27.01.2020, 19:49

Хотя обе работы для меня, я думаю, что совет Lev Levitsky является корректным. Используйте -b аргумент.

Существует хороший шанс, что перенаправление вывода является проблемой и что Вы ничего не получаете через stdout, так попробуйте это вместо этого:

top -b 2>&1 | grep "my_program" > top.log

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

0
27.01.2020, 19:49

: Мой обходной путь к этой проблеме был:

while :;do top -b -n 1 | grep "my_program" >> top.log;done &

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

1
27.01.2020, 19:49

Теги

Похожие вопросы