Unix管道进入ls

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)

(如果路径可能包含空格,则需要双引号.)

  • 涉及`xargs` 的答案更清晰,但这尊重我的外壳的颜色编码,这是一个很好的福音! (3认同)
  • @Tengerye:阅读其文档。 (3认同)