сбой Sed grep на нераспознанной опции - PullRequest
1 голос
/ 19 апреля 2019

Я автоматизирую установку сервера NFS. Перед запуском брандмауэра я хочу проверить:

systemctl status firewalld
Firewall status: ● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago
 Main PID: 129969 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─129969 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

1) нужно разоблачить firewalld

2) умер в огне

для этого я выполняю

STATUS=`systemctl status firewalld`
echo "Firewall status: ${STATUS}"
MASKED=`grep -e "masked" $STATUS`
DEAD=`grep -e "dead" $STATUS`

однако команда grep завершается неудачно с:

grep: unrecognized option '--nofork'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
grep: unrecognized option '--nofork'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

grep не работает по шаблону: --nofork grep предполагает, что это опция

Я читал различные посты, но не нашел решения этой проблемы. Я думал, что мог бы использовать «sed» для удаления «-», но это fao = ils с той же ошибкой

Ура, Roland

1 Ответ

2 голосов
/ 19 апреля 2019

$STATUS - это строка, а не имя файла.В оболочке POSIX попробуйте:

MASKED=$(printf "%s" "$STATUS" | grep -e "masked")

В bash конвейер можно удалить с помощью строки здесь:

MASKED=$(grep -e "masked" <<<"$STATUS")

Комментарии

  1. Лучше всего использовать строчные или смешанные регистры для переменных оболочки.Система использует все заглавные буквы для своих переменных, и вы не хотите случайно перезаписывать одну из них.

  2. Если вы явно не хотите, чтобы оболочка выполняла расширения, включая разбиение слов или расширение пути , поместите все переменные оболочки в двойные кавычки.

Примеры

Обратите внимание, что это приводит к появившейся ошибке:

$ Status="Firewall status: ● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago
 Main PID: 129969 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─129969 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid"
$ grep -e "running" $Status
grep: unrecognized option '--nofork'
Usage: grep [OPTION]... PATTERN [FILE]...

Обе эти версии, однако, работают:

$ printf "%s" "$Status" | grep -e "running"
   Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago
$ grep -e "running" <<<"$Status"
   Active: active (running) since Fri 2019-04-19 02:28:46 UTC; 27min ago
...