Unix管道进入ls

时间:2013-08-13 13:50:29

标签: linux unix pipe ls

我以为我理解* nix管道直到现在......我有一个名为studio的可执行文件符号链接到我的Android Studio安装程序,我假设我可以通过< / p>

which studio | ls -l

但这不起作用。它给我的东西等同于在当前目录中运行ls -l

如果我运行which studio,我会获得/home/me/bin/studio。如果我运行ls -l /home/me/bin/studio,我会得到预期的输出,显示符号链接位置。

那么为什么管道版本不起作用?什么没有我对管道的了解?

3 个答案:

答案 0 :(得分:48)

要做到这一点,您需要xargs

which studio | xargs ls -l

来自man xargs

  

xargs - 从标准输入

构建和执行命令行

要完全了解管道的工作原理,您可以阅读What is a simple explanation for how pipes work in BASH?

  

Unix管道连接STDOUT(标准输出)文件描述符   第二个进程到STDIN(标准输入)。什么   那么当第一个进程写入其STDOUT时就会发生这种情况   输出可以通过第二个过程立即读取(来自STDIN)。

答案 1 :(得分:20)

ls不从标准输入读取其参数,而是从命令行读取。要在命令行中获取目录,必须使用命令替换:

ls -l "$( which studio )"

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

答案 2 :(得分:0)

由于ls -l不接受任何输入,因此它不会对which studio的输出执行任何操作。这里重要的是理解标准输入和参数之间的区别。标准输入是一个特殊文件,使用scanf过程(例如C中的程序)读取,程序的参数作为argv和{{传递给主过程。 1}}参数。 argc是一个由null终止的char数组的数组,argv是该数组的长度。