I am doing my homework and I have a question about one line. I don't understand what this
if test -d $2 then echo "$2: Is directory" >&2 ; exit 21 fi
It is simply displaying the message "
/blah/blah/: Is directory" to
stderr. Also known as Standard Error which is denoted by
&2 messages are displayed on
stdout. Also known as Standard Output which is denoted by
More details on displaying messages to
&>2 can be found here:
In your command posted, both messages for
stderr will appear on your terminal screen. However some applications will separate the
stderr 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
stderr from user or system administrator perspective see:
For a programmers perspective of stdin, stdout, stderr which are &0, &1 and &2 respectively see:
File descriptor 1 is
stdout and File descriptor 2 is
> to redirect output is the same as using
1>. This says to redirect
stdout (file descriptor 1).
Normally, we redirect to a file. However, we can use
>& to redirect to
stdout (file descriptor 1) or
stderr (file descriptor 2) instead.
Therefore, to redirect
stdout (file descriptor 1) to
stderr (file descriptor 2), you can use
For more information: