【发布时间】:2012-03-27 00:01:43
【问题描述】:
我正在寻找一种将命令(比如 command1)的输出用作另一个命令(比如 command2)的参数的方法。
我在尝试grepwho 命令的输出但使用另一组命令给出的模式时遇到了这个问题(实际上是tty 通过管道传递给sed)。
上下文:
如果显示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了解您的身份。 -
如果不清楚 -
who | grep $(tty | sed 's/\/dev\///')不起作用的原因是它在grep $(tty | sed 's/\/dev\///')的标准输入已经连接到 @987654341 的输出之后运行tty@,所以tty输出not a tty而不是/dev/pts/5。
标签: bash shell pipe command-line-arguments nested