加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 为什么`ls`每行列出多个文件,但`ls pipe / redirect`列出每行只有1个文件?

发布时间:2020-05-23 01:23:21 所属栏目:Linux 来源:互联网
导读:只是好奇,这是ls的正常预期行为: user@host:~$lsCodes Documents Music Pictures TemplatesDesktop Downloads Papers Public Videos 但是当我使用带管道/重定向的ls时,它的行为类似于ls -1: user@host:~$ls | catCodesDesktopDocumen

只是好奇,这是ls的正常预期行为:

user@host:~$ls
Codes    Documents  Music   Pictures  Templates
Desktop  Downloads  Papers  Public    Videos

但是当我使用带管道/重定向的ls时,它的行为类似于ls -1:

user@host:~$ls | cat
Codes
Desktop
Documents
Downloads
Music
Papers
Pictures
Public
Templates
Videos

为什么? (以及如何编写这样的程序,在这样的stdout和管道之间提供差异输出?)

附:我还设置别名l =’ls -F’,这次管道/重定向不再是ls -1样式:

user@host:~$l | cat
Codes/    Documents/  Music/   Pictures/  Templates/
Desktop/  Downloads/  Papers/  Public/    Videos/

不使用别名,它以ls -1样式执行命令,但是:

$ls -F | cat
Codes/
Desktop/
Documents/
Downloads/
Music/
Papers/
Pictures/
Public/
Templates/
Videos/

解决方法

你可以从 source检查这一行:
if (format == long_format)
  format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);

它使用isatty函数来检查stdout是否指向tty,如果是,则打印many_per_line,如果不是则打印one_per_line.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读