I am doing my homework and I have a question about one line. I don't understand what this >&2
means:
if test -d $2
then echo "$2: Is directory" >&2 ; exit 21
fi
I am doing my homework and I have a question about one line. I don't understand what this >&2
means:
if test -d $2
then echo "$2: Is directory" >&2 ; exit 21
fi
File descriptor 1 is
stdout
and File descriptor 2 isstderr
.Using
>
to redirect output is the same as using1>
. This says to redirectstdout
(file descriptor 1).Normally, we redirect to a file. However, we can use
>&
to redirect tostdout
(file descriptor 1) orstderr
(file descriptor 2) instead.Therefore, to redirect
stdout
(file descriptor 1) tostderr
(file descriptor 2), you can use>&2
.For more information:
It is simply displaying the message "
/blah/blah/: Is directory
" tostderr
. Also known as Standard Error which is denoted by&2
.Without the
&2
messages are displayed onstdout
. Also known as Standard Output which is denoted by&1
.More details on displaying messages to
&>2
can be found here:In your command posted, both messages for
stdout
andstderr
will appear on your terminal screen. However some applications will separate thestderr
messages and perform special processing.Most people don't bother redirecting
echo
error messages to>&2
but it is technically the correct way of doing things.For more reading on
stdin
,stdout
andstderr
from user or system administrator perspective see:For a programmers perspective of stdin, stdout, stderr which are &0, &1 and &2 respectively see:
So
if test -d $2
Means if $2(the second argument) is a directory, thenecho "$2: Is directory" >&2
means print $2: is directory,and
>&2
means send the output to STDERR, So it will print the message as an error on the console.You can understand more about shell redirecting from those references:
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections
https://amrbook.com/linux/shell-script/shell-scripting-pipes-and-redirection/