Это буквально, а {fd}
не заполнитель. У меня есть скрипт, который делает это, и ни в коем случае не использует источник, и нигде не ссылается {fd} Это действительный Bash?
exec {fd}</dev/watchdog
Это буквально, а {fd}
не заполнитель. У меня есть скрипт, который делает это, и ни в коем случае не использует источник, и нигде не ссылается {fd} Это действительный Bash?
exec {fd}</dev/watchdog
Ответы:
Вместо того, чтобы выбирать дескриптор файла и надеяться, что он доступен:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
эта запись просит оболочку выбрать файловый дескриптор, который в данный момент не используется, открыть файл для чтения по этому дескриптору и присвоить номер данной переменной ( fd
).
$ exec {fd}< /dev/watchdog
$ echo $fd
10
REDIRECTIONS
. Это действительно не бросается в глаза, так как они не дают явного примера.
/dev/watchdog
также не существует в Mac OS X; это специфичное для Linux устройство.
Форма:
{var}<filename
сделал оболочку открытым файлом filename
для чтения и сохранения номера дескриптора файла в переменной var
. Между {var}
операторами и операторами перенаправления не должно быть пробела , и номер дескриптора файла будет больше или равен 10
.
Эта функция была оригинальна из ksh
(начиная с версии ksh93r в 2006 году), bash
скопировал его много позже bash-4.1-alpha
с 2010 года zsh
также изменение ранее чем bash
с zsh 4.3.4
2007 года.
Это объясняется в разделе руководства Bash по перенаправлениям .
Каждому перенаправлению, которому может предшествовать номер дескриптора файла, вместо этого может предшествовать слово вида { varname }. В этом случае для каждого оператора перенаправления, кроме
>&-
и<&-
, оболочка выделит дескриптор файла больше 10 и присвоит его { varname }. Если>&-
или<&-
предшествует { varname }, значение varname определяет дескриптор файла для закрытия.