如何获取"哪些模块的输出路径"作为" ls"的论据?

时间:2015-03-20 12:59:44

标签: linux bash shell

如您所知,请致电"任何模块"返回其命令的路径,如下所示:

which git

上面的命令会返回如下路径:

/usr/local/bin/git

那么如何将此输出作为另一个命令的参数,例如LS? 所以它看起来像这样:

ls (which git) 

在调用时,我希望将其解析为:

ls /usr/local/bin/git

所以我不需要手动复制输出并将其粘贴为另一个命令的参数,我知道这很愚蠢。

到目前为止,我已尝试过这个:

ls | which git

上面没有工作,它没有取得" git"的输出。作为" ls"的论据。所以我试过了:

ls `which git`

以上任何一项都不起作用。 " git"实际上并没有被解析成" ls"的参数。我已经通过各种文章进行了探索,但我无法找到答案。

有人可以建议我一个合适的解决方案吗?

3 个答案:

答案 0 :(得分:1)

尝试使用命令替换:

ls $(which git)

答案 1 :(得分:1)

ls `which git`

是正确的,虽然有点小马车(我们稍后会谈到)。反引号中的内容被替换为打印内容,因此命令变为:

ls /usr/local/bin/git

然而,有两个潜在的问题。首先,which git 可以打印包含空格(或其他可怕的东西)的路径,因此应该有引号。其次,反叛被弃用并且不鼓励。首选语法是$(),它有一些优点(你马上就会看到一个)。因此,命令应该是:

ls "$(which git)"

注意此命令只会打印(因为那是ls的作用):

/usr/local/bin/git

除非您为ls设置了别名(或者在ls上有其他名为$PATH的内容(我想到了这一点!)。

由于您已表示不喜欢此结果,因此我假设您要么想要其他格式,在这种情况下,您必须向ls添加一些选项(通过使用别名或直接使用),例如:

ls -lh "$(which git)"

您希望ls <{1}}所在的目录,在这种情况下,您必须使用{{ 1}},就像这样(在这里你可以看到,与反引号不同,git可以嵌套):

dirname

(Stack Overflow&#39;语法突出显示并不完全理解$()中的引号。您只需要相信我,他们就是这样。重新纠正。)

答案 2 :(得分:0)

你使用后退滴答```

你的最后一个例子适合我

$ ls -al `which git`
-rwxr-xr-x  1 root  wheel  14224 Jun 28  2014 /usr/bin/git

唯一的原因是,如果which git返回带有空格的内容,我认为不会这样做。

应该用尴尬来补救:

ls -al "`which git`"