echo >&2 "some text" what does it mean in shell scripting

ShellUnixSh

Shell Problem Overview


I have seen echo being used like this in many places:

echo >&2 message text ...

What does this mean?

I understand 2>&1, however, I am not sure how to interpret the usage above.

Can anyone please explain?

Shell Solutions


Solution 1 - Shell

To quickly explain what the others missed:

echo "hey" >&2

> redirect standard output (implicit 1>)

& what comes next is a file descriptor, not a file (only for right hand side of >)

2 stderr file descriptor number

Redirect stdout from echo command to stderr. (If you were to useecho "hey" >2 you would output hey to a file called 2)

Solution 2 - Shell

The use of >&2 here is sending the output to standard error instead of standard out. This is generally the better place to send logging output that isn't the actual result of the computation, especially if the result is printed to standard out (possibly redirected to a file) rather than to some other file output (i.e. sending the logging to standard error ensures that it won't get included with the real output that was redirected to the output file).

Solution 3 - Shell

While other answers give good explanations, they're missing the exact question that is being asked here. The best answer is in the form of a comment directly on the question, but alas, Stack Overflow does not consider me worthy of being allowed to add comments.

So, quoting tripleee:

> The previse [sic] position of the redirection in the command > line is not important. All of >&2 echo message and > echo >&2 message and echo message >&2 are equivalent.

This is the exact question that I came looking for, and none of the current answers answer that; they just explain things that I already knew. On the other hand, the question could benefit from better phrasing, but again, I am barred from commenting, so...

Solution 4 - Shell

The >&2 redirection is a shortcut for 1>& 2.

You understand 2>& 1 so you will understand that this links the command's stdout to the current stderr

Solution 5 - Shell

command > /yourfile is equal to command 1 > /yourfile

so >&2 is same as 1 > &2 redirect stdout to stderr

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCuriousMindView Question on Stackoverflow
Solution 1 - ShellJiteView Answer on Stackoverflow
Solution 2 - ShellMichael Aaron SafyanView Answer on Stackoverflow
Solution 3 - ShellDave.HakuView Answer on Stackoverflow
Solution 4 - ShellHenk LangeveldView Answer on Stackoverflow
Solution 5 - Shellfocus zhengView Answer on Stackoverflow