#bash #shell #io-redirection
#bash #оболочка #перенаправление ввода-вывода
Вопрос:
В приведенном ниже примере 0>amp;-
работает, что команда ssh-keygen существует при появлении запроса ввода. Разве это не должно быть 0<amp;-
(закрыть стандартный интерфейс) вместо этого? Оба 0>amp;-
и 0<amp;-
, похоже, работают одинаково (когда появляется запрос ввода / подтверждения ssh-keygen, он закрыт) — как это объяснить?
user@system:~/.ssh$ ls -al test123
ls: cannot access 'test123': No such file or directory
user@system:~/.ssh$ ssh-keygen -b 2048 -t rsa -f test123 -q -N "" 0>amp;-
user@system:~/.ssh$
user@system:~/.ssh$ ls -al test123
-rw------- 1 user user 1823 Sep 21 08:01 test123
user@system:~/.ssh$ ssh-keygen -b 2048 -t rsa -f test123 -q -N "" 0>amp;-
test123 already exists.
Overwrite (y/n)? user@system:~/.ssh$
user@system:~/.ssh$
user@system:~/.ssh$ ssh-keygen -b 2048 -t rsa -f test123 -q -N "" 0<amp;-
test123 already exists.
Overwrite (y/n)? user@system:~/.ssh$
В документации есть:
n<amp;-
Close input file descriptor n.
0<amp;-, <amp;-
Close stdin.
n>amp;-
Close output file descriptor n.
Комментарии:
1. Конструкция просто закрывает дескриптор файла, идентифицированный этим номером. Вы также можете использовать
1<amp;-
для закрытия стандартного вывода. Внутренне это в основном закрываетclose
функцию, и этой функции все равно, открыт ли FD для чтения или записи или для обоих.
Ответ №1:
Между 0>amp;-
и нет разницы 0<amp;-
.
Существует разница между >amp;-
и <amp;-
.
Эта разница:
>amp;-
по умолчанию n =1
<amp;-
по умолчанию n =0
Подробнее смотрите в этом сообщении StackExchange