X

How to pipe command output to the clipboard in OS X

In addition to standard output redirects, Apple supports a couple of alternatives for managing Terminal command output.

Topher Kessler MacFixIt Editor
Topher, an avid Mac user for the past 15 years, has been a contributing author to MacFixIt since the spring of 2008. One of his passions is troubleshooting Mac problems and making the best use of Macs and Apple hardware at home and in the workplace.
Topher Kessler
3 min read

When you run commands in the OS X Terminal, they will usually output some result, such as the information you are trying to look up, or status details about the command being run. By default this output is send to the Terminal window, where it is displayed for you to see before the command exits and drops you back to the command prompt. If you are intending to use this output for something you can copy and paste it into another file, but there are other ways to save the information that you may find helpful.

Standard command output in the OS X Terminal
Standard commands result in output being send to the Terminal window so you can see them (click for larger view). Screenshot by Topher Kessler/CNET

One common approach to saving Terminal output is to redirect it to a file on disk, which can be done by appending to the command a greater-than symbol followed by a path to the file where you would like to save the output.

For instance, the command "ls" will list the current directory's contents. By default this list will display in the Terminal, but if you use the following command it will save the listed items in a file called "files.txt" located on your Desktop:

ls > ~/Desktop/files.txt

If the document "files.txt" already exists, then this command will overwrite it with the output of the "ls" command, but you can use two greater-than symbols ("ls >> ~/Desktop/files.txt") to append new output to the end of the file instead of overwriting. Of course, to look at the output, you'll still need to go to that file and open it.

Terminal output piped to the "open" command.
Piping output to the "open" command can display it in a new TextEdit document for more convenient handling (click for larger view). Screenshot by Topher Kessler/CNET

Another approach is to pipe the results of the command to Apple's "open" command and instruct it to open the file in a text editor like Apple's TextEdit program. While redirecting with the greater-than symbol, as noted above, sends the command's output to a file, piping sends the output to another command, so it can manage the output (parse it, save it, print it, or otherwise act on it).

To pipe the output of a command, you simply use the vertical line character ("|"), such as in the following example, which will take the output of the "ls" command and pipe it to the "open" command, which the "-fe" tag will instruct to read the piped input and open it in TextEdit (the default text editor):

ls | open -fe

When you run this command, instead of the listed output appearing in the Terminal, the Terminal will simply drop to another command prompt, and the output will appear in a plain text window in TextEdit. You can then more easily parse or copy and paste the text, as you can now interact with it using a cursor and arrow keys.

Piping command output to the clipboard in OS X
Piping the output of a command to the "pbcopy" command will place it directly on the clipboard, so you can paste it into a document of your choosing (click for larger view). Screenshot by Topher Kessler/CNET

Opening the output in TextEdit this way is convenient, but if you wish to move it to another document such a manuscript you are working on in Microsoft Word or Apple's Pages programs, or if you would like to e-mail the command output to someone, then you will still need to select it and copy it. If this was your intent all along, then you can skip the step of highlighting text by saving the output of the command directly to the OS X clipboard. To do this, pipe the output to the "pbcopy" (pasteboard copy) command, as follows:

ls | pbcopy

With this done, you can now go to any program and paste by pressing Command-V, and the output should be preserved in formatted plain-text.



Questions? Comments? Have a fix? Post them below or e-mail us!
Be sure to check us out on Twitter and the CNET Mac forums.