Назад | Перейти на главную страницу

Почему grep не работает в каталоге / usr / lib / systemd / system?

На днях я был в системе RHEL7.1 и хотел найти определенное слово в каталоге / usr / lib / systemd / system, где расположены все файлы модулей systemd. Как обычно, я использовал команду grep. Посмотрите, что произошло:

# cd /usr/lib/systemd/system
# grep After *
grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

Затем я попробовал RHEL7.0, RHEL7.2, RHEL7.3 и получил тот же результат. Если я использую команду grep в любом другом каталоге, все работает нормально. Кто мне скажет, почему у меня такое странное поведение?

Проблема в том, что в этом каталоге есть файл, который начинается с тире, а именно -.slice.

Когда вы используете * все имена файлов становятся аргументами для grep, и -.slice интерпретируется как попытка передать параметр в grep. Поскольку первый символ после тире - это точка, вы получите это сообщение:

grep: invalid option -- '.'

Вы обнаружите, что у вас такая же проблема с расширением оболочки в каталоге, если вы просто попробуете

ls *

Как только проблема будет понята, ответ легко найти. То есть вы можете добавить двойной дефис, чтобы указать на grep что список обычных опций закончился и все следующие аргументы следует рассматривать как имена файлов:

grep After -- *