Почему "верх" | grep> file 'не работает?

Я протестировал следующую команду, но она не работает.

$> top -b -d 1 | grep java > top.log

Он не использует стандартную ошибку. Я проверил, что он использует стандартный вывод, но top.log всегда пуст. Почему это?

Ответ 1

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

Сообщите grep использовать буферизацию строки на выходе. Попробуйте:

top -b -d 1 | grep --line-buffered java > top.log

Ответ 2

В моей встроенной машине grep не имел опции -line-buffered. Поэтому я использовал это обходное решение для себя:

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

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