grep 给出的结果未出现在原始上下文中

grep 给出的结果未出现在原始上下文中

我是unix新手,我已经遇到过很多发生的事情。

我键入命令(例如ps -eo 'tty,pid,comm')并返回文本。据我了解,当我将结果通过管道传输到其中时,grep应该搜索输出并从该输出返回结果。

那么,为什么我得到的结果与命令完全不同呢ps?我得到一个很长的文本,它甚至不是原始命令的形式ps,并且包含模糊的信息,看起来像一个设置文件。

答案1

根据您的评论,您看到的输出似乎是具有与姓名第一个此类文件的。原因是?grep 命令中的字符在执行之前已被 shell 扩展。

因此,您的 ps 命令正在执行其应该执行的操作,但 grep 完全忽略该输入,而不是在命令行上 grep 文件。

通过执行以下操作来亲自证明这一点:

mkdir ~/tempdir
cd ~/tempdir
ps -eo 'tty,pid,comm' | grep ?

这将创建一个空目录(其中没有文件),然后将导致?无法扩展,并直接传递给 grep。然后创建两个文件,如下所示:

touch a
echo thisisfilebwithana > b

然后重新运行 grep,如下所示:

grep ?

你会看到

thisisfilebwithana

因为grep看到了这个:

grep a b

它解释为“显示文件 b 中包含 'a' 的所有行”。

相反,您可能想做的是转义问号:

ps -eo 'tty,pid,comm' | grep \?

或者

ps -eo 'tty,pid,comm' | grep '?'

相关内容