На днях я был в системе 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 -- *