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

linux – 为什么`ls`每行列出多个文件,但`ls piperedirect`列出每行只有1个文件?,第1张

概述只是好奇,这是ls的正常预期行为: user@host:~$lsCodes Documents Music Pictures TemplatesDesktop Downloads Papers Public Videos 但是当我使用带管道/重定向的ls时,它的行为类似于ls -1: user@host:~$ls | catCodesDesktopDocumen 只是好奇,这是ls的正常预期行为:
user@host:~$lsCodes    documents  Music   Pictures  TemplatesDesktop  Downloads  Papers  Public    VIDeos

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

user@host:~$ls | catCodesDesktopdocumentsDownloadsMusicPapersPicturesPublicTemplatesVIDeos

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

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

user@host:~$l | catCodes/    documents/  Music/   Pictures/  Templates/Desktop/  Downloads/  Papers/  Public/    VIDeos/

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

$ls -F | catCodes/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.

总结

以上是内存溢出为你收集整理的linux – 为什么`ls`每行列出多个文件,但`ls pipe / redirect`列出每行只有1个文件?全部内容,希望文章能够帮你解决linux – 为什么`ls`每行列出多个文件,但`ls pipe / redirect`列出每行只有1个文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1049397.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存