Проверка наличия строки в файле с помощью cat | grep

Проверка наличия строки в файле с помощью cat | grep

Добрый день всем

Назначение: проверка наличия строки в файле и выполнение соответствующих действий.

if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"

В выходных данных всегда отображается сообщение «строка существует, пропускается» в случаях, когда строка существует и отсутствует.

Добавление вывода в переменную, например x, замена строки в операторе if на переменную дает правильный вывод,

Как можно «пропустить» переменный маршрут и выполнить команду напрямую?

решение1

grepможет использоваться как команда условия. Возвращает true, если шаблон совпадает. Здесь вам нужен поиск по фиксированной строке ( -F) и, вероятно, совпадение по всей строке ( -x):

if sudo cat /etc/sudoers |
  grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL"
then
  echo found
else
  echo not found
fi

Или, если sudoersконфигурация позволяет выполнить grepкоманду в дополнение к catследующей:

if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
  echo found
else
  echo not found
fi

-qговорит grepбыть тихим, просто возвращать статус true/false через статус выхода, но не выводить ничего на stdout.

Обратите внимание, что конфигурация sudoers может включать другие файлы конфигурации, которые этот подход не будет учитывать. То же самое касается разрешений, предоставленных группам, членом которых является пользователь.

Вместо этого вы можете использовать sudo -lU "$USER".

Связанный контент