Изменение размера терминала влияет на вывод grep внутри команды наблюдения

807
jonderry

Если я запускаю команду вроде:

watch "ps -ef | grep '^foo.*bar'" 

и соответствующая выходная строка ps -efявляется длинной линией, как

foo <lots and lots of text here> bar 

на вывод этой строки влияет размер терминала. Например, если терминал работает в полноэкранном режиме, и эта строка помещается на экране, вывод будет отображаться в режиме просмотра. Однако, если я уменьшу размер окна до половины размера экрана, чтобы полоса была обрезана от экрана, тогда строка grep полностью исчезнет (предположительно, строка обрезается до того, как она попадает в grep в конвейере). Это проблема, потому что я пытаюсь извлечь часть этой строки для последующего использования в конвейере.

Есть ли какое-то решение для предотвращения влияния размера терминала на вывод команды grep в команде наблюдения?

1

2 ответа на вопрос

2
grawity

Это не grep, это ps . Добавьте -wwпараметры ( ps -efww), чтобы он всегда выводил полные строки.

1
garyjohn

Я не знаю, каковы правильные решения, но, похоже, это решает проблему,

watch "COLUMNS=160 ps -ef | grep '^foo.*bar'" 

за счет того, что строки из PS сложены. Измените значение «160» на длину, достаточную для самой длинной строки «foo. * Bar», которую вы ожидаете увидеть.

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