输出ls | wc -l

时间:2014-11-11 20:06:47

标签: linux

通常wc -l命令的输出给出文件中的行数。 但是,当我们将ls命令的输出传递给它时,它似乎正确地显示了当前工作目录中的文件和目录以及链接的数量。

我的问题是ls命令的输出显示了同一行中某些文件和目录的名称。因此,与ls | wc -l相比,使用ls -l | wc -l的情况下,为什么会提供相同的输出。 提前谢谢。

2 个答案:

答案 0 :(得分:5)

ls检测到它被管道传输到另一个程序而不是控制台,并且每行输出一个文件/目录。您可以尝试ls | cat查看此行为。

答案 1 :(得分:3)

程序可以检查文件描述符是否引用终端,并根据此显示不同的输出。 查看可用于此目的的isatty(3)

事实上,通常的做法是在管道输出时简化输出,以便进一步处理可能被管道传输的其他程序。 尤其是不可打印的字符,如改变颜色等的终端控制代码,可能会很难处理,当用户没有直接看到输出时,通常是不必要的。