разница в 0>

#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