如您所知,请致电"任何模块"返回其命令的路径,如下所示:
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"的参数。我已经通过各种文章进行了探索,但我无法找到答案。
有人可以建议我一个合适的解决方案吗?
答案 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`"