我在重定向方面遇到问题:
$ which python3
给我
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
和
$ ls -l /Library/Frameworks/Python.framework/Versions/3.7/bin/python3
给我
lrwxr-xr-x 1 root admin 9 5 fév 18:30 /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 -> python3.7
但
which python3 | ls -l
不要给我同样的结果。
你知道为什么吗 ?正确的重定向命令是什么?
我正在使用 OSX。
不得不说下面这个问题将上一个命令的输出作为参数传递给下一个命令可能与这个相同,但是如果我查看给出的答案,我就迷失了。为了发挥作用,它们需要比这里给出的更先进的知识或研究。
答案1
ls
不从标准输入获取输入,而仅从参数获取输入:
尝试ls -l "$(which python3)"
答案2
ls
不从管道读取。事实上,ls
根本不使用它的标准输入。
相反,您必须ls -l
通过以下命令行传递您想要运行的内容ls
:
ls -l "$( which python3 )"
这在命令行上使用命令替换,ls -l
该命令替换将扩展为命令的输出which
。然后,这将用作 的命令行参数ls
。
或者:
ls -l "$( command -v python3 )"
有关的:
答案3
其他答案都很好,但这也很方便:
which python3 | xargs ls -l
xargs
从指定程序获取值stdin
并将它们作为命令行参数附加到指定程序。