为什么 'cat' 命令只有一个输出带有换行符?
Why does only one output of the 'cat' command come with a linebreak?
由于我的声誉太低 post 图像我将复制终端
我的问题来源的输出:
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
rsyslogd.pid 文件可能没有以换行符 (ASCII 0x0A) 结尾。
您没有提到您是如何打开文件的,但是,我怀疑您使用的文本编辑器不会显示非 printable 字符(如换行符和退格键)。不要使用文本编辑器,而是尝试使用 hexdump 工具查看原始文件。然后将十六进制值与 ASCII table 进行比较。我想你会发现599和636后面的non-printable字符是不一样的
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)
由于我的声誉太低 post 图像我将复制终端 我的问题来源的输出:
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
rsyslogd.pid 文件可能没有以换行符 (ASCII 0x0A) 结尾。
您没有提到您是如何打开文件的,但是,我怀疑您使用的文本编辑器不会显示非 printable 字符(如换行符和退格键)。不要使用文本编辑器,而是尝试使用 hexdump 工具查看原始文件。然后将十六进制值与 ASCII table 进行比较。我想你会发现599和636后面的non-printable字符是不一样的
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)