Если я делаю service --status-all я получаю что-то вроде этого:

[ ? ]  webmin
[ ? ]  whoopsie
[ + ]  winbind
[ - ]  x11-common

Я хочу показать только бегущие ([+]), поэтому я сделал

service --status-all | grep +

что выделяет их, но как мне сделать так, чтобы они исключали другие строки?

Кроме того, это показывает фактические работающие службы или только те, которые запланированы для запуска при запуске?

1 ответ1

1

Вы можете изменить количество grep строк (называемых "контекстом") с помощью параметров -C [num] или --context=[num] .

Обычно по умолчанию для grep контекст без контекста, поэтому используемая команда должна быть в порядке. Вы можете заставить его показывать только совпадающие строки с помощью service --status-all | grep + -C 0 .

Чтобы исключить совпадающие строки, используйте -v или --invert-match . Таким образом, вы можете передать исходную команду через | grep -v '[ ?' | grep -v '[ -' чтобы избавиться от строк с - или ? как их статус. Вы также можете объединить несколько строк соответствия, используя экранированные "или" (символ канала), например, grep -v '[ ?\|[ -' .

Однако, поскольку service по какой-то причине направляет свой вывод в stderr вместо обычного stdout , выходные потоки должны быть объединены с |& для правильной работы grep . Таким образом, рабочей командой здесь будет service --status-all |& grep + .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .