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
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It only takes a minute to sign up.Sign up to join this community
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:
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:
if test -d $2 Means if $2(the second argument) is a directory, then
echo "$2: Is directory" >&2 means print $2: is directory,
>&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: