
Добрый день всем
Назначение: проверка наличия строки в файле и выполнение соответствующих действий.
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"
.