Я делаю свою домашнюю работу, и у меня есть вопрос об одной строке. Я не понимаю что это >&2
средства:
if test -d $2
then echo "$2: Is directory" >&2 ; exit 21
fi
Это просто отправляет сообщение об ошибке "/blah/blah/: каталог" к stderr
вместо stdout
:
сообщения для stdout
и stderr
, все еще появится на Вашем экране. Некоторые приложения будут рассматривать stderr
сообщения по-другому, хотя и выполняют специальную обработку.
Большинство людей не потрудилось перенаправлять echo
сообщения об ошибках к >&2
, но это - технически корректный способ сделать вещи.
Дескриптор файла 1 stdout
, и Дескриптор файла 2 stderr
.
Используя >
для перенаправления вывода совпадает с использованием 1>
. Это говорит для перенаправления дескриптора файла 1, который является stdout
.
Обычно, мы перенаправляем в файл. Однако мы можем использовать &
для перенаправления к дескриптору файла вместо этого.
Поэтому для перенаправления stdout
(дескриптор файла 1) к stderr
(дескриптор файла 2) можно использовать >&2
.
Итак, if test -d $2
Означает, что если $2(второй аргумент) является каталогом, то
echo "$2: Является каталогом" >&2
означает, что print $2: это каталог,
и >&2
означает отправку вывода в STDERR,
Таким образом, он напечатает сообщение как ошибку на консоли.
Вы можете узнать больше о перенаправлении оболочки из этих ссылок: