通常wc -l
命令的输出给出文件中的行数。
但是,当我们将ls
命令的输出传递给它时,它似乎正确地显示了当前工作目录中的文件和目录以及链接的数量。
我的问题是ls
命令的输出显示了同一行中某些文件和目录的名称。因此,与ls | wc -l
相比,使用ls -l | wc -l
的情况下,为什么会提供相同的输出。
提前谢谢。
答案 0 :(得分:5)
ls
检测到它被管道传输到另一个程序而不是控制台,并且每行输出一个文件/目录。您可以尝试ls | cat
查看此行为。
答案 1 :(得分:3)
程序可以检查文件描述符是否引用终端,并根据此显示不同的输出。
查看可用于此目的的isatty(3)
。
事实上,通常的做法是在管道输出时简化输出,以便进一步处理可能被管道传输的其他程序。 尤其是不可打印的字符,如改变颜色等的终端控制代码,可能会很难处理,当用户没有直接看到输出时,通常是不必要的。