![](/img/trans.png)
[英]How can I pass the output of the cat/ls -l command to an argument in unix?
[英]How can I take an output path of “which somemodule” as an argument of “ls”?
如您所知,调用“ which anymodule”将其路径返回到命令,如下所示:
which git
上面的命令返回如下路径:
/usr/local/bin/git
那么,如何将该输出作为另一个命令 (例如ls) 的参数 ? 所以看起来像这样:
ls (which git)
在调用时,我希望将其解析为:
ls /usr/local/bin/git
因此,我不需要手动复制输出并将其粘贴为另一个我知道这很愚蠢的命令的参数。
到目前为止,我已经尝试过了:
ls | which git
上面的方法不起作用,它不会将“ which git”的输出作为“ ls”的参数。 因此,我尝试了:
ls `which git`
以上任一都不起作用。 实际上,“哪一个git”没有解析为“ ls”的参数。 我浏览了各种文章,但找不到答案。
有人可以建议我适当的解决方案吗?
尝试使用命令替换:
ls $(which git)
ls `which git`
是正确的,尽管有一些小问题(我们稍后再讨论)。 反引号内的内容将替换为它们显示的内容,因此命令变为:
ls /usr/local/bin/git
但是,存在两个潜在问题。 首先, which git
可能会打印包含空格(或其他令人恐惧的东西)的路径,因此应在其周围加引号。 其次,不赞成使用反引号。 首选的语法是$()
,它具有一些优点(您稍后会看到一个优点)。 因此,命令应为:
ls "$(which git)"
注意此命令将只打印(因为ls
就是这样做的):
/usr/local/bin/git
除非您为ls
设置了别名(否则在$PATH
上有其他称为ls
东西(我不高兴!)。
既然你已经表达了这样的结果,有些不喜欢我假设你要么需要一些其他的格式,在这种情况下,你必须添加一些选项, ls
(通过使用别名或直接),例如:
ls -lh "$(which git)"
或者,您想要ls
git
所在的目录 ,在这种情况下,您将不得不使用dirname
,就像这样(在这里您可以看到,与反引号不同, $()
可以嵌套):
ls "$(dirname "$(which git)")"
(Stack Overflow的语法突出显示部分不太理解$()
的引号。您只需要相信我它们是正确的即可。)
你用回勾号
你的最后一个例子对我有用
$ ls -al `which git`
-rwxr-xr-x 1 root wheel 14224 Jun 28 2014 /usr/bin/git
我认为不会的唯一原因是which git
返回带有空格的内容。
尴尬的应该纠正:
ls -al "`which git`"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.