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/watchdogrównież nie istnieje w systemie Mac OS X; jest to urządzenie specyficzne dla systemu Linux.
Formularz:
{var}<filename
uczyniono powłokę otwartym plikiem filenamedo 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), bashskopiowane go dużo później w bash-4.1-alphaod 2010 roku zshrównież zmiana wcześniej niż bashod zsh 4.3.42007 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.