Я понимаю, что exec
может сделать перенаправление ввода / вывода на текущей оболочке, но я вижу только использование как:
exec 6<&0 # Link file descriptor #6 with stdin.
# Saves stdin.
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
Из того, что я понимаю, что <
для входного потока, >
для выходного потока. Так что же exec 3<&1
делать?
PS: я нашел это из исходного кода Bats
bash
shell
io-redirection
file-descriptors
exec
Zhenkai
источник
источник
exec 3<&1
отличается от3<&1
того, что последняя будет влиять на одну команду, тогда как первая влияет на текущую оболочку.Ответы:
От
bash manpage
:Я сделал несколько отладок с
strace
:Для
3<&1
:Для
3>&1
:Для
2>&1
:Похоже, что
3<&1
делать точно так же, как3>&1
, дублируя стандартный вывод для файлового дескриптора 3.источник
dup2()
системный вызов используется для любого типа файлового дескриптора;x>&y
против bashx<&y
это просто синтаксический сахар. Кроме того, когда stdio подключен к tty, устройство tty очень часто открывается для чтения + записи и просто дублируется от 0 до 1 и 2.exec 3<&1
же, какexec >&3
?exec 3>&1
.