【问题标题】:Why does only one output of the 'cat' command come with a linebreak?为什么“cat”命令只有一个输出带有换行符?
【发布时间】:2020-01-08 16:17:12
【问题描述】:

由于我的声誉太低而无法发布图像,我将在终端复制 输出我的问题的来源:

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

【问题讨论】:

    标签: terminal ubuntu-18.04 pid cat


    【解决方案1】:

    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)

    【讨论】:

      猜你喜欢
      • 2022-10-01
      • 2023-03-30
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多