Що робить 'exec {fd} </ dev / watchdog' у Bash


28

Це буквально, {fd}не є заповнювачем. У мене є сценарій, який робить це, і не створює джерела ні в чому, а також не посилається на {fd} де-небудь ще. Це дійсний баш?

exec {fd}</dev/watchdog

Відповіді:


34

Замість того, щоб вибрати дескриптор файлу і сподіватися, що він доступний:

exec 4< /dev/watchdog  # Was 4 in use? Who knows?

це позначення просить оболонку вибрати дескриптор файлу, який наразі не використовується, відкрити файл для читання в цьому дескрипторі та призначити номер даній змінній ( fd).

$ exec {fd}< /dev/watchdog
$ echo $fd
10

Я впевнений, що ти маєш рацію, тому що (1) я пригадую, що десь його читав, і (2) я просто спробував це (і він працює). Але я не міг знайти його документально ніде. (Звичайно, у мене було менше десяти хвилин на пошук, перш ніж ви опублікували свою відповідь.) Чи можете ви надати посилання на те, де це зафіксовано?
Скотт

2
Див. Довідкову сторінку, другий абзац розділу REDIRECTIONS. Це насправді не вискакує на вас, оскільки вони не дають явного прикладу.
чепнер

Ви маєте рацію, я пропустив його в man bash, але це там, де ви сказали. Слід зазначити, що будь-яке слово, а не просто fd, буде працювати в дужках, і що воно призначає fd> = 10.
Грегг Левенталь

3
@Scott, це не тільки в bash, але і лише в bash 4.1 або новіших версіях (таким чином, вони не доступні для версій 3.2, які все ще використовуються на MacOS).
Чарльз Даффі

2
@CharlesDuffy /dev/watchdogне існує і в Mac OS X; це специфічний для Linux пристрій.
сутінки

11

Форма:

{var}<filename

зробив файл оболонки відкритим filenameдля читання та збереження номера дескриптора файлу у змінній var. Між {var}операторами переадресації та переадресації не допускається місця , а число дескрипторів файлів буде більшим або рівним 10.

Ця функція була оригінальна з ksh(починаючи з версії ksh93r в 2006 році), bashскопіював його багато пізніше bash-4.1-alphaз 2010 року zshтакож зміна раніше ніж bashз zsh 4.3.42007 року.


2

Це пояснено в посібнику Баша про перенаправлення .

Кожному перенаправленню, якому може передувати номер дескриптора файлу, замість цього може передувати слово форми { varname }. У цьому випадку для кожного оператора перенаправлення, за винятком >&-і <&-, оболонка виділить дескриптор файлу більше 10 і призначить його { varname }. Якщо >&-або <&-передує { varname }, значення varname визначає дескриптор файлу, який потрібно закрити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.