To dosłownie, {fd}
nie jest symbolem zastępczym. Mam skrypt, który to robi i niczego nie dostarcza, ani nie odwołuje się do {fd} nigdzie indziej. Czy to ważna walka?
exec {fd}</dev/watchdog
To dosłownie, {fd}
nie jest symbolem zastępczym. Mam skrypt, który to robi i niczego nie dostarcza, ani nie odwołuje się do {fd} nigdzie indziej. Czy to ważna walka?
exec {fd}</dev/watchdog
Odpowiedzi:
Zamiast wybierać deskryptor pliku i mieć nadzieję, że będzie on dostępny:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
notacja ta prosi powłokę o wybranie deskryptora pliku, który nie jest aktualnie używany, otwarcie pliku do odczytu na tym deskryptorze i przypisanie numeru do danej zmiennej ( fd
).
$ exec {fd}< /dev/watchdog
$ echo $fd
10
REDIRECTIONS
. Tak naprawdę nie wyskakuje na ciebie, ponieważ nie dają wyraźnego przykładu.
/dev/watchdog
również nie istnieje w systemie Mac OS X; jest to urządzenie specyficzne dla systemu Linux.
Formularz:
{var}<filename
uczyniono powłokę otwartym plikiem filename
do odczytu i przechowywania numeru deskryptora pliku w zmiennej var
. Nie ma dozwolonej przestrzeni między {var}
operatorami przekierowania i, a numer deskryptora pliku będzie większy lub równy 10
.
Funkcja ta była od oryginału ksh
(od wersji ksh93r w 2006), bash
skopiowane go dużo później w bash-4.1-alpha
od 2010 roku zsh
również zmiana wcześniej niż bash
od zsh 4.3.4
2007 roku.
Wyjaśniono to w sekcji podręcznika Bash na temat przekierowań .
Każde przekierowanie, które może być poprzedzone numerem deskryptora pliku, może zamiast tego być poprzedzone słowem w postaci { varname }. W takim przypadku dla każdego operatora przekierowania, z wyjątkiem
>&-
i<&-
, powłoka przydzieli deskryptor pliku większy niż 10 i przypisze go do { varname }. Jeśli>&-
lub<&-
poprzedza { nazwa_zmiennej }, wartość nazwa_zmiennej określa deskryptor pliku do zamknięcia.