Це буквально, {fd}
не є заповнювачем. У мене є сценарій, який робить це, і не створює джерела ні в чому, а також не посилається на {fd} де-небудь ще. Це дійсний баш?
exec {fd}</dev/watchdog
Це буквально, {fd}
не є заповнювачем. У мене є сценарій, який робить це, і не створює джерела ні в чому, а також не посилається на {fd} де-небудь ще. Це дійсний баш?
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 року.
Це пояснено в посібнику Баша про перенаправлення .
Кожному перенаправленню, якому може передувати номер дескриптора файлу, замість цього може передувати слово форми { varname }. У цьому випадку для кожного оператора перенаправлення, за винятком
>&-
і<&-
, оболонка виділить дескриптор файлу більше 10 і призначить його { varname }. Якщо>&-
або<&-
передує { varname }, значення varname визначає дескриптор файлу, який потрібно закрити.