What Does This 2 Mean in Shell Scripting?

//

Scott Campbell

In Shell scripting, the number 2 has a special meaning. It is commonly used to represent the standard error stream.

The Standard Error Stream

When we execute a command in the terminal, it produces three types of output:

  • Standard Output (stdout): This is the default output stream where the command’s normal output is displayed.
  • Standard Error (stderr): This stream is used to display error messages and any other diagnostic information that should not be mixed with the standard output.
  • Standard Input (stdin): This is the input stream where commands can read data from.

The standard error stream is particularly useful when we want to separate error messages from regular output. By convention, error messages are usually sent to stderr so that they can be easily distinguished and redirected if needed.

Redirecting Standard Error with 2>

In Shell scripting, we can redirect the standard error stream using the number 2 followed by a greater than sign (>).

command 2> file.txt

This command redirects the error messages produced by command to a file named file.txt. If the file does not exist, it will be created; otherwise, its contents will be overwritten. To append new errors to an existing file without overwriting its contents, we can use two greater than signs (>>) instead:

command 2>> file.txt

An Example:

Let’s take an example to understand this better. Consider a script that tries to open a non-existent file:

#!/bin/bash
filename="nonexistent.txt"
cat $filename

If we execute this script, it will display an error message:

cat: nonexistent.txt: No such file or directory

To redirect this error message to a file, we can modify the script as follows:

#!/bin/bash
filename="nonexistent.txt"
cat $filename 2> error.txt

Now, when we run the script, the error message will be stored in a file named error.

The & Character

In addition to redirecting the standard error stream, we can also combine it with the standard output using the ampersand (&) character. This allows us to redirect both streams to the same location.

command > output.txt 2>&1

In this example, both the standard output and standard error of command will be redirected to output. The number 1 represents the standard output stream.

Let's modify our previous example script to redirect both output streams:

#!/bin/bash
filename="nonexistent.txt"
cat $filename > output.txt 2>&1

This command will store both the regular output and error message generated by cat $filename in a file named output.

Closing Thoughts

The number 2 in Shell scripting has a special meaning as it represents the standard error stream. By redirecting the standard error using 2>, we can separate error messages from regular output and handle them independently. Combining it with the ampersand character allows us to redirect both streams to a single location.

Understanding these concepts is essential for effective Shell scripting and troubleshooting. Now that you know what this 2 means in Shell scripting, you can utilize it to improve the error handling and output management in your scripts.