为什么 grep 在 /usr/lib/systemd/system 目录中不起作用?

-1 grep systemd

前几天我在 RHEL7.1 系统上,我想在所有 systemd 单元文件所在的 /usr/lib/systemd/system 目录中搜索特定词。我像往常一样使用 grep 命令。看看发生了什么:

# cd /usr/lib/systemd/system
# grep After *
grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Run Code Online (Sandbox Code Playgroud)

然后,我尝试了 RHEL7.0、RHEL7.2、RHEL7.3 并得到了相同的结果。如果我在任何其他目录中使用 grep 命令,一切正常。谁能告诉我为什么我会有这种奇怪的行为?

Mar*_*erg 5

问题是该目录中有一个以破折号开头的文件,即-.slice.

当您使用*所有文件名时,将成为 的参数grep-.slice并被解释为试图将选项传递给 grep。由于破折号后的第一个字符是一个点,您会收到该消息:

grep: invalid option -- '.'
Run Code Online (Sandbox Code Playgroud)

如果你只是尝试,你会发现你在目录中扩展shell也有同样的问题

ls *
Run Code Online (Sandbox Code Playgroud)

一旦理解了问题,就很容易找到答案。也就是说,您可以添加双破折号以表示grep正常选项列表已结束,并且以下所有参数都将被视为文件名:

grep After -- *
Run Code Online (Sandbox Code Playgroud)