我正在寻找一种方法,以命令1的输出作为另一个命令2的参数。
我在尝试使用另一个命令(实际上是tty管道sed)给出的模式来grep who命令的输出时遇到了这个问题。
上下文:
如果 tty 显示:
/dev/pts/5
而 who
显示:
root pts/4 2012-01-15 16:01 (xxxx)
root pts/5 2012-02-25 10:02 (yyyy)
root pts/2 2012-03-09 12:03 (zzzz)
目标:
我只想获取与“pts/5”相关的行,因此我将 tty
管道传递给 sed
,如下所示:
$ tty | sed 's/\/dev\///'
pts/5
测试:
以下命令尝试失败:
$ who | grep $(echo $(tty) | sed 's/\/dev\///')"
可能的解决方案:
我已经发现以下方法可以正常工作:
$ eval "who | grep $(echo $(tty) | sed 's/\/dev\///')"
但是我确定可以避免使用eval
。
最后一点:我注意到who
的"-m"参数可以给我所需的内容(只获取与当前用户链接的who
行),但我仍然好奇如何使管道和命令嵌套的组合起作用...
who am i
命令来获取当前用户信息。 - kevwho | grep $(tty | sed 's/\/dev\///')
无法工作的原因是它在标准输入已经连接到who
的输出之后运行了tty
,所以tty
输出not a tty
而不是/dev/pts/5
。 - ruakh