命令的 Grep 结果、重定向与管道

命令的 Grep 结果、重定向与管道

有人能解释为什么下面两个命令会产生不同的结果吗?

第一个将 的输出通过管道传输who到 grep,第二个将 的输出who作为重定向。

~: who |grep $(tty|cut -c 6-)
my_username tty1         2016-01-22 09:56 (:0)

~: grep $(tty|cut -c 6-) <(who)
my_username pts/5        2016-01-22 11:35 (:0.0)

在两种情况下,将其用作color=alwaysgrep 的选项,会使第一个匹配于tty。第二个匹配于 ,pts/5正如预期的那样。

tty | cut -c 6-命令为我(在这个例子中)提供了pts/5的部分/dev/pts/5

我尝试在各个部分使用引号('"),但没有成功。

我现在意识到该who -m命令给出了我想要的那行,但是为什么上面的行不同的问题仍然存在。

答案1

重点是当 shell 执行语句的时候$(...)

 echo $(tty)       # answers me for example /dev/pts/xx
 who | echo $(tty) # answers me `not a tty`

所以在管道过程中当前版本狂欢(GNU bash,版本 4.3.11)调用另一个子shell
您可以在Bash 初学者指南 [1],[2]

不要让标题误导您...它不仅对初学者来说充满了有用的信息。

相关内容