【发布时间】:2021-11-13 13:04:20
【问题描述】:
我认为如果我将 ls 的输出重定向到一个文件,那么本来会发送到控制台的完全相同的字符序列将被写入该文件。
为了测试,我创建了 3 个文件,然后列出它们
$ touch a b c
$ ls
a b c
我现在再次运行 ls,这次重定向到我 cat
的文件$ ls > out
$ cat out
a
b
c
out
没想到在out的每个文件名之间多了一个0A的换行符
$ xxd out
00000000: 610a 620a 630a 6f75 740a a.b.c.out.
将 ls 的输出连接到 xxd
$ ls | xxd
00000000: 610a 620a 630a 6f75 740a a.b.c.out.
换行符仍然存在。
0A 字节是如何到达那里的?如果 ls 被重定向或者 shell 在某些情况下会忽略换行符,它的行为是否会有所不同?
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
【问题讨论】:
-
试试
ls | xxd....(或ls | cat) -
尽管多年来一直依赖这种行为,但我什至从未注意到它:感谢您指出!
-
管道到 xxd 是一个有趣的实验,我已经更新了一些问题
标签: bash io-redirection