В учебнике bash, который я читаю, говорится, что если вы откроете дескриптор файла для чтения, т.е.
exec 3< echolist
Тогда вы должны закрыть это так,
exec 3<&-
Однако, если вы открываете дескриптор файла для записи, он должен быть закрыт следующим образом:
exec 3>&-
Тем не менее, когда я смотрю в Интернете, я вижу людей, открывающих файлы, а затем закрывающих их следующим образом:
exec 3>&-
ПРИМЕЧАНИЕ: когда, согласно учебнику, они должны использовать exec 3<&1
.
Итак, мой вопрос, все ли файловые дескрипторы могут быть закрыты через exec n>&-
где n - номер файлового дескриптора? Независимо от того, был ли он открыт для чтения, письма или и того, и другого?
bash
shell
io-redirection
Джейсон
источник
источник
>&-
и<&-
является Ф.Д. по умолчанию , если не указано (>&-
в1>&-
то время как<&-
есть0<&-
). То же самое дляx>&y
чего то же самое,x<&y
за исключением случаев, когдаx
не предусмотрено.Ответы:
Вы можете закрыть дескриптор файла, используя оба
<&-
и>&-
,bash
проанализирует два синтаксиса как один и тот же.Из файла y.tab.c в
bash
исходном коде:источник
<>
файловых дескрипторах.3>&-
или3<&-
кажется, чтобы закрыть дескриптор.<>
может быть сделано теми же способами.Насколько я могу видеть,
exec 3>&-
иexec 3<&-
то же самое и может быть использован на любом файле дескриптора, независимо от того, как он был открыт. В соответствии с разделами 2.7.6 и 2.7.5 определения POSIX языка командной оболочки :Обратите внимание, что ни один из них не указывает, как изначально был открыт файловый дескриптор n. Это соответствует тому факту, что close (2) не заботится о том, как вы открыли файл.
Быстрое следующее:
по сравнению с этим:
показывает, что в обоих случаях Bash делает одно и то же.
Два слегка интересных факта
[n]>&-
закрывают файловые дескрипторы.В коде Bash для обработки перенаправлений (redir.c) вы можете найти это:
источник
[N]>&WORD
: git .savannah.gnu.org / cgit / bash.git / tree / doc /…Пример для понимания cuonglm закрытия '<>' FD.
Это цитируется в Расширенном руководстве по написанию сценариев на http://tldp.org/LDP/abs/html/io-redirection.html.
источник