首页 > 解决方案 > 为什么“cat”命令只有一个输出带有换行符?

问题描述

由于我的声誉太低而无法发布图像,我将重现我的问题源自的终端输出:

username@computer:/run$ cat rsyslogd.pid 
599username@computer:/run$ cat acpid.pid 
636
username@computer:/run$

cat acpid.pid 带有换行符,而 cat rsyslog.pid 没有。

但是如果我打开两个文件,则没有明显的区别(例如,文件 acpid.pid 没有额外的空行)

问题是:为什么一个.pid文件带有换行符而另一个文件没有?

附加信息:我的操作系统是 Ubuntu 18.04.3

标签: terminalubuntu-18.04pidcat

解决方案


rsyslogd.pid 文件可能不以换行符 (ASCII 0x0A) 结尾。

您没有提到如何打开文件,但是,我怀疑您使用的文本编辑器不会显示不可打印的字符(如换行符和退格)。与其使用文本编辑器,不如尝试使用 hexdump 工具查看原始文件。然后将十六进制值与 ASCII 表进行比较。我想你会发现 599 和 636 之后的不可打印字符是不同的。

hexdump -C rsyslogd.pid
hexdump -C acpid.pid

以下命令序列再现了您的输出。关键是使用 echo 命令的 -n 标志来创建末尾没有换行符的文件。

$ echo -n test > file_no_new_line.txt
$ echo test > file_with_new_line.txt
$ cat file_no_new_line.txt
test$ cat file_with_new_line.txt
test
$

这是我的示例中显示的两个文件的 hexdump 的输出。

$ hexdump -C file_no_new_line.txt
00000000  74 65 73 74                                       |test|
00000004
$ hexdump -C file_with_new_line.txt
00000000  74 65 73 74 0a                                    |test.|
00000005
$

命令输出(在本例中来自 cat)和相互运行的 shell 提示符 ($) 也依赖于 shell。如果通过上述步骤无法重现该行为,请尝试另一个 shell(例如 /bin/sh)


推荐阅读