我是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 '?'