hca*_*ver 34 unix linux ls pipe
我以为我理解*nix管道直到现在......我有一个可执行文件studio
,其中的符号链接到我的安装,Android Studio
我假设我可以获得链接到的位置
which studio | ls -l
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它给我的东西等同于刚刚ls -l
在当前目录中运行.
如果我跑which studio
,我得到/home/me/bin/studio
.如果我运行,ls -l /home/me/bin/studio
我得到预期的输出显示符号链接位置.
那么为什么管道版本不起作用呢?什么没有我对管道的了解?
fed*_*qui 55
要做到这一点,你需要xargs
:
which studio | xargs ls -l
Run Code Online (Sandbox Code Playgroud)
来自man xargs
:
xargs - 从标准输入构建和执行命令行
要完全了解管道的工作原理,您可以阅读有关管道如何在BASH中工作的简单解释?:
Unix管道将第一个进程的STDOUT(标准输出)文件描述符连接到第二个进程的STDIN(标准输入).然后会发生的是,当第一个进程写入其STDOUT时,第二个进程可以立即读取该输出(来自STDIN).
cho*_*oba 20
ls
不从标准输入读取其参数,而是从命令行读取.要在命令行中获取目录,必须使用命令替换:
ls -l "$( which studio )"
Run Code Online (Sandbox Code Playgroud)
(如果路径可能包含空格,则需要双引号.)