terminal - 为什么“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
解决方案
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)
推荐阅读
- r - 如何在一行代码中对 R 中的一列进行子集化和求和
- java - 如何为 JDBC fetch 语句创建可测试的代码
- php - 使用 Laravel (Sockets) 连接两台服务器
- powerbi - DAX:请解释为什么这个带有变量的度量不起作用
- sql - 比较两行中的值并得到 ORA-00918: 列定义不明确
- laravel - 由 Redis 订阅消息触发时,Laravel 作业不会被处理
- r - 如何调整当前散点图代码以匹配 ggplot2 (R) 中的目标散点图?
- aws-lambda - 将代码从 CodePipeline 传递到 PythonFunction
- laravel - Laravel / AWS S3 - 如何验证使用预签名 URL 上传的文件
- apache-superset - 超集图表电子邮件时间表和芹菜节拍时间表。为什么使用 celery beat 时间表而不是图表电子邮件时间表发送报告?