2

It seems that the purpose of cat is to concatenate several files. However, many people still use cat instead of less (or a similar program like more) to display a file. See, for example, the GNU m4 manual and the answer "How can I display the contents of a text file on the command line?".

Man page: less

-F or --quit-if-one-screen

    Causes less to automatically exit if the entire file can be displayed on the first screen.

-X or --no-init

    Disables sending the termcap initialization and deinitialization strings to the terminal. This is sometimes desirable if the deinitialization string does something unnecessary, like clearing the screen.

Nowadays, is it a good practice to use cat to display or view a file? Why use cat to view a file?

This makes me think to Useless Use Of Cat.

Note: This question is not about the differences between less and more. Moreover, it concerns the visualization of a file created earlier.


According to the answers and comments, it seems that cat is used beyond its use because it is easier to use than a pager (e.g. more, less...). Some people think this is an irrelevant fact (or useless) but experience shows that various subtleties pertaining to the shell may have practical consequences: use a shell loop to process a text file, use unquoted variables...

Negative consequences vary in intensity. For example, cat foo bar | less is valid because the user concatenates two files but cat foo | less is not valid. In the same spirit, cat seems to be required in "a pipeline" although it seems that a pager like less works in a pipeline too (note: less is not suited in all cases concerning displaying, e.g. Reading a named pipe: tail or cat?).

See also: How to cat a file with "or" options

  • 5
    If you know a file isn't that large, cat is easier: how many keystrokes do you need to type cat vs. less -F? – wurtel Apr 08 '19 at 13:57
  • 3
    And with cat you can continue your work in the same terminal and the output is still visible to lookup something, copy & paste etc. – Freddy Apr 08 '19 at 14:02
  • 3
    This question is going to generate a lot of personal opinion and blatant speculation, and little in the way of documented analyses or facts. Plus lengthy back and forth in comments of things that we already have questions and answers about, such as https://unix.stackexchange.com/q/463102/5132 and https://unix.stackexchange.com/q/21548/5132 . – JdeBP Apr 08 '19 at 14:07
  • 1
    I need an additional -X, otherwise I don't see anything for small files... – pLumo Apr 08 '19 at 14:27
  • 1
    Making an issue of whether cat | blah is "correct" in general practice is just fanning the flames for another pointless FOSS Holy War. – 0xSheepdog Apr 08 '19 at 14:28
  • -X disables the termcap de-/inititialization, so not clearing screen at the end. – pLumo Apr 08 '19 at 14:48
  • Are the "many people" that you refer to the users on this site? – Kusalananda Apr 08 '19 at 15:41
  • Because cats are sooo cute ;-) – pLumo Apr 08 '19 at 15:50
  • Bad habit for me too. I wonder if using alias cat='less' would be a good idea to I train my brain/fingers? After all aliases are not used in scripts and most other uses at the console would fall in the "Useless uses of cat" category anyway. – xenoid Apr 08 '19 at 16:11

4 Answers4

7

I'm going to assume that the "many people" in the question refers to people writing tutorials, manuals, or answers on web-sites such as this one.

When writing terminal commands in a text document, the cat command is commonly used to show the contents of a file.

An example of this:

$ cat script.sh
#!/bin/sh
echo 'hello'
$ chmod +x script.sh
$ ./script.sh
hello

Here, I show that I have a file called script.sh, what its contents is, that I'm making it executable and that I'm running it and what the result of that is.

Using cat in this example is just a way of "showing all one's cards", i.e. to explicitly display all the prerequisites for an example (and doing it as part of a textual representation of a terminal session).

less and other screen based pagers, depending on how they are used, would not necessarily give that output in the terminal. So if I wrote

$ less script.sh
#!/bin/sh
echo 'hello'

and a user tried it by themselves, they may wonder why the text of the script appears different in their terminal and then disappears from the terminal once they closed the less pager (if that's the way they've configured the pager), or whether their less is different from the less used in the answer (or tutorial or whatever it may be), or if they're doing something else wrong. Allowing for the possibility of this train of thought is counterproductive and disruptive for the user.

Using cat when showing an example in the terminal as text is good as it gives a fairly easy way of reproducing the exact same results as in the given text. For larger files, it may be better to show the file separately, and then concentrate on how that file is used when writing the terminal command as text.

If you prefer to use less, more, most, view, sublime, or some other pager or program to view files, that's totally fine. Go ahead and do that. But if you want to provide a reproducible text describing some workflow in the terminal, you would have to also give the user a warning that the output may differ between what they read and what they see in their own terminal, depending on what pager is used and how it's configured.

Kusalananda
  • 333,661
  • @Fólkvangr the writers of the articles/answers have no idea about the skill level of the person reading the answer. Depending on what the context is, this could be someone brand new and they don't know anything. Lot's of people just google answers and follow line by line without fully understanding. By making it easier for the audience, the writer ensures no ambiguity or further questions, like where did the text go. – SaggingRufus Apr 08 '19 at 17:01
6

less is a non-standard GNU utility.

cat is POSIX:

     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

NAME

cat - concatenate and print files

SYNOPSIS

cat [-u] [file...]

...

cat is more likely to exist and to have consistent behavior.

Andrew Henle
  • 3,780
  • 3
    That argument rather falls over when it turns out that so too is more. (-: – JdeBP Apr 08 '19 at 14:02
  • 2
    @JdeBP True, but the question refers to less quite specifically, relegating more to a footnote - literally. I'm also pretty sure that footnote wasn't in the original posting (edits made in the first few minutes don't show). – Andrew Henle Apr 08 '19 at 14:19
  • @JdeBP Except more does not have the additional functionality of less and still requires more keystrokes, and different commands/function keys, to do things. There are several ways to do almost EVERYTHING in *NIX. Often there is no single "correct" way of doing it (all things being equal). Now, if you need a method that does not spawn additional processes, or have other esoteric limitations, then certainly the ability to do things multiple ways is good. – 0xSheepdog Apr 08 '19 at 14:26
  • The question is not asking about additional functionality, and as even M. Henle acknowledges, explicitly includes more in what it is asking about. An argument that only the cat program in the question is standard falls over because it isn't true. It's as simple as that. Remember where I wrote about comment discussions that address things that we already have Q&As about? Here you are doing it. Read https://unix.stackexchange.com/a/333946/5132 and https://unix.stackexchange.com/a/340511/5132 for starters. – JdeBP Apr 08 '19 at 14:44
  • 1
    So, more is more standard, less is less standard, and more has more functionality than cat. but more has less functionality than less. – Mark Plotnick Apr 08 '19 at 18:07
  • @MarkPlotnick all I got from that: less is more when dealing with cats. – SaggingRufus Apr 08 '19 at 18:15
3

is it a good practice to use cat to display or view a file?

IMO, it's neither good nor bad.

"Good practice" is whatever makes you more effective as an individual and, what is often more important, it's whatever makes you a more effective member of some team.

Your preference for what tool you use to view short text files is not likely to affect your work or, how you get along with your co-workers.

Solomon Slow
  • 131
  • 4
2

IMHO, I guess it's an "old / bad" habit. Myself, I always use cat because I do not think about less that is more suitable. If you try to display the contents of a binary file, less asks if you agree to display it anyway and automatically paginates a text when it is long. Cat is short to write and is easy to use for very short files that do not require paging. Nevertheless, it is indeed intended for concatenation. In this case, used to display text, it performs a concatenation on the standard output of the file given in argument 1 and the standard input which is the default of argument 2.

PhLinuX
  • 31
  • 1
    I'm with you, but I don't feel there is anything "bad" about the habit. Purely a preference thing, given the other reasons that have also been listed. – 0xSheepdog Apr 08 '19 at 14:21
  • @Fólkvangr: not a good idea when you need to work on a lot of systems. – pLumo Apr 08 '19 at 15:47