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