bash, вложенные команды и перенаправления - PullRequest
4 голосов
/ 26 января 2012

Я пытаюсь отследить использование процессора процессом, используя следующую команду:

    top -b -d 1 | grep myprocess.exe

Далее я бы хотел перенаправить это в файл журнала, например,

    top -b -d 1 | grep myprocess.exe > output.log

Теперь, это на самом деле не работает, потому что он думает, что я grep myprocess.exe> ​​output.log вместо myprocess.exe

Кто-нибудь знает, как я могу заставить это перенаправление работать?

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Теперь, это на самом деле не работает, потому что он думает, что я grep myprocess.exe > output.log вместо myprocess.exe

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

Если вы хотите, чтобы вывод записывался в оба, вынужен другой процесс, который получает stdout вашего предыдущего конвейера как stdin и дублирует его.Например:

previous_pipeline | tee output.log

tee выведет на стандартный вывод то, что он получает на stdin (то есть для stdout, все то же, что и раньше), но дополнительно откроет другой файл (указанный как cmdline arg) и напишите копию.

1 голос
/ 26 января 2012

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

top -b -d 1 | grep myprocess.exe | tee output.log

Если вы хотите, чтобы он не выводил:

top -b -d 1 | grep myprocess.exe | tee output.log > /dev/null
...