bash将ls输出重定向到文件出现意外0A字节问题咨询
问题解答
你观察到的差异是ls命令自身的设计导致的,和Shell无关:ls会自动检测输出目标是不是交互式终端(TTY),匹配不同的默认输出格式:
- 当输出目标是终端时,
ls默认启用多列输出模式,文件名之间用空格分隔,会自动适配终端宽度排版 - 当输出目标不是终端(比如重定向到文件、管道传递给其他命令)时,
ls默认启用单行单条目模式,每个文件名后面都会追加换行符(也就是你看到的0A字节)
你可以通过参数手动指定输出格式,覆盖默认的自动判断逻辑:
- 加
-1参数:强制每行输出一个文件名,就算直接输出到终端也会用这种格式$ ls -1 a b c out - 加
-C参数:强制多列输出,就算输出到文件/管道也会保留终端下的多列空格分隔格式$ ls -C > out $ cat out a b c out
Shell在整个过程中不会修改ls的输出内容,你看到的换行符完全是ls在非TTY输出场景下主动生成的。
内容的提问来源于stack exchange,提问作者twisted
相关产品推荐
相关产品推荐

