看来 的目的cat
是连接几个文件。然而,许多人仍然使用cat
代替less
(或类似的程序more
)来显示文件。例如,参见GNU m4 手册和答案“如何在命令行上显示文本文件的内容?”。
手册页:更少
-F 或 --quit-if-one-screen
less
如果整个文件可以显示在第一个屏幕上, 则会导致自动退出。-X 或 --no-init
禁止将 termcap 初始化和取消初始化字符串发送到终端。如果去初始化字符串执行一些不必要的操作(例如清除屏幕),有时这是可取的。
如今,使用它cat
来显示或查看文件是一个好的做法吗?为什么要使用cat
查看文件?
这让我想到猫的无用用途。
笔记:这个问题不是关于less
和之间的差异more
。此外,它还涉及先前创建的文件的可视化。
根据答案和评论,似乎cat
超出了它的用途,因为它比寻呼机更容易使用(例如more
,less
...)。有些人认为这是一个无关紧要的事实(或无用),但经验表明,与 shell 相关的各种微妙之处可能会产生实际后果:使用 shell 循环来处理文本 文件,使用不带引号的变量...
负面后果的强度各不相同。例如,cat foo bar | less
有效,因为用户连接了两个文件,但是cat foo | less
无效。本着同样的精神,cat
似乎在“管道”中需要,尽管似乎寻呼机less
也可以在管道中工作(注意:less
并不适合所有有关显示的情况,例如读取命名管道:tail 还是cat?)。
也可以看看: 如何使用“或”选项来对文件进行分类
答案1
我假设问题中的“很多人”是指在诸如本网站之类的网站上编写教程、手册或答案的人。
在文本文档中编写终端命令时,该cat
命令通常用于显示文件的内容。
一个例子:
$ cat script.sh
#!/bin/sh
echo 'hello'
$ chmod +x script.sh
$ ./script.sh
hello
在这里,我展示了我有一个名为 的文件script.sh
,它的内容是什么,我正在使其可执行,我正在运行它以及其结果是什么。
在此示例中使用cat
只是“展示所有牌”的一种方式,即显式显示示例的所有先决条件(并将其作为终端会话的文本表示的一部分)。
less
和其他基于屏幕的寻呼机,取决于它们的使用方式,不一定会在终端中提供该输出。所以如果我写
$ less script.sh
#!/bin/sh
echo 'hello'
并且用户自己尝试过,他们可能想知道为什么脚本的文本在终端中显示不同,然后在关闭寻呼机后从终端消失less
(如果这是他们配置寻呼机的方式),或者他们是否less
是与less
答案(或教程或其他任何内容)中使用的不同,或者他们是否做错了其他事情。允许这种思路的可能性对于用户来说会适得其反并且具有破坏性。
cat
在终端中将示例显示为文本时使用很好,因为它提供了一种相当简单的重现示例的方法精确的与给定文本中的结果相同。对于较大的文件,最好单独显示该文件,然后集中精力了解该文件的情况用过的将终端命令写入文本时。
如果您更喜欢使用less
、more
、most
、view
、sublime
或其他寻呼机或程序来查看文件,那完全没问题。继续做吧。但是,如果您想提供描述终端中某些工作流程的可重现文本,则还必须向用户发出警告,表明他们在自己的终端中读取的内容和在自己的终端中看到的内容之间的输出可能有所不同,具体取决于使用的寻呼机以及它是如何配置的。
答案2
less
是一个非标准 GNU 实用程序。
The Open Group Base Specifications Issue 7, 2018 edition IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008) Copyright © 2001-2018 IEEE and The Open Group
姓名
cat - 连接并打印文件
概要
cat [-u] [file...]
...
cat
更有可能存在并保持一致的行为。
答案3
使用 cat 显示或查看文件是一个好习惯吗?
IMO,这既不好也不坏。
“良好实践”是指任何能让你作为个人更高效的做法,而且通常更重要的是,它是让你成为某个团队中更高效的成员的任何做法。
您对使用什么工具查看短文本文件的偏好不太可能影响您的工作或您与同事的相处方式。
答案4
恕我直言,我想这是一个“旧/坏”习惯。我自己,我总是使用 cat,因为我不认为越少越好。如果您尝试显示二进制文件的内容,则 less 会询问您是否同意显示它,并在文本较长时自动对文本进行分页。 Cat 编写起来很短,对于不需要分页的非常短的文件很容易使用。尽管如此,它确实是用于串联的。在本例中,用于显示文本,它对参数 1 中给出的文件的标准输出和参数 2 的默认标准输入执行串联。