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

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

有一天,我在 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.

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

答案1

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

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

grep: invalid option -- '.'

你会发现,如果你尝试在目录中使用 shell 扩展,也会遇到同样的问题

ls *

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

grep After -- *

相关内容