When the user executes a command in a Linux interactive shell, the output displays in the text terminal. However, there are ways to change this behavior using additional shell commands connected in a pipeline.
In this tutorial, you will learn how to use the tee command in Linux to manage the output of a command.
- A system running Linux
- Access to the command line or terminal
- Sudo privileges
What Does tee Command Do in Linux?
tee command reads standard input (stdin) and writes it to both standard output (stdout) and one or more files.
tee is usually part of a pipeline, and any number of commands can precede or follow it.
Note: To process standard inputs in Linux, you can use the xargs command which can be used in combination with other commands.
tee Commands in Linux With Examples
tee command is used alone or with additional options. The following sections list the available options and provide command usage examples.
The basic syntax for the
tee command is:
[command] | tee [options] [filename]
The example below demonstrates the use of
tee to create a file that stores information about a network interface while providing the same output in the terminal:
The cat command confirms that
tee successfully wrote the output of
ifconfig to the file
If the file used for the command already exists,
tee overwrites the previous contents of the file.
Append to the Given File
Overwriting the file’s content is the default behavior of the
tee command. Use argument
--append) to add the command output to the end of the file.
[command] | tee -a [filename]
For example, use the
echo command to append a line of text to a file:
Confirm the successful addition with the
Write to Multiple Files
tee followed by any number of files to write the same output to each of them:
[command] | tee [options] [filename1] [filename2]...
The example below shows writing the output of the
echo command to two files:
ls command shows that
tee successfully created files
Hide the Output
tee to store the command output in a file and skip the terminal output, use the following syntax:
[command] | tee [options] [filename] >/dev/null
In the example bellow,
tee creates a file containing the network interface data, skipping the standard output:
Redirect Output of One Command to Another
tee does not have to be the last command in the pipeline. Use it to forward the output to another command:
[command] | tee [options] [filename] | [command]
In the following example,
tee stores the output of the
ls command to
example.txt and passes the content of that file to the grep command, which finds and displays all instances of the word “example”:
tee to exit properly even after the previous command has been interrupted, add the argument
[command] | tee -i [filename]
The next example shows
tee writing output from the ping command and completing the action successfully even after
ping is interrupted with
Using tee with Sudo
tee to write to a root-owned file or file belonging to another user, place the sudo command right before
[command] | sudo tee [options] [filename]
The example below shows an unsuccessful attempt to write to the root-owned
sudoex.txt. When the
sudo command is added, the operation completes:
Using tee in Vim Editor
If you open and edit a root-owned file in Vim without using the
sudo command, trying to save changes produces an error:
To override this error, type the following into Vim:
:w !sudo tee %
After you enter the
sudo password, Vim displays a warning but writes the changes to the file.
Diagnose Errors Writing to Non-Pipes
tee to print an error message when the process fails, use the
[command] | tee -p [filename]
The default action of
tee -p is to exit and print the error message immediately upon detecting the error writing to a pipe. To change the command’s behavior on write error, use the
--output-error argument, followed by the mode specifying the behavior:
[command] | tee --output-error=[mode] [filename]
There are four possible modes:
warn– diagnoses errors writing to any output.
warn-nopipe– diagnoses errors writing to any non-pipe output.
exit– exits on errors writing to any output.
exit-nopipe– exits on errors writing to any non-pipe output.
Use tee Command with Bash Script
tee command is often found in bash scripts. Consider the following example:
The script above prints the “Hello World” message and stores the output in a log file. Executing the script creates a log file in the
tmp folder. The log contains the output of the script:
Watch Log Files
Writing script output to a log file is usually performed with the
./testbash.sh > testbash.log
The command above creates a log file but does not write anything to standard output.
tee to create a log file and see the output in the terminal:
./testbash.sh | tee testbash.log
See Help and Version Information
See the current version of the
tee command by typing:
For the instructions regarding the
tee command syntax and the available arguments, use the command’s help argument:
By reading this tutorial, you learned how to use the
tee command in a pipeline to manage the command output. The article also talked about the use of
tee in bash scripts.
Read more about shell commands in this Linux commands cheat sheet.