Isso é literal, {fd}
não é um espaço reservado. Eu tenho um script que faz isso e não gera nada, nem faz referência a {fd} em nenhum outro lugar. Isso é válido?
exec {fd}</dev/watchdog
Isso é literal, {fd}
não é um espaço reservado. Eu tenho um script que faz isso e não gera nada, nem faz referência a {fd} em nenhum outro lugar. Isso é válido?
exec {fd}</dev/watchdog
Respostas:
Em vez de precisar escolher um descritor de arquivo e torcer para que ele esteja disponível:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
essa notação solicita que o shell escolha um descritor de arquivo que não esteja em uso no momento, abra o arquivo para leitura nesse descritor e atribua o número à variável especificada ( fd
).
$ exec {fd}< /dev/watchdog
$ echo $fd
10
REDIRECTIONS
. Na verdade, isso não desperta em você, pois eles não dão um exemplo explícito.
/dev/watchdog
também não existe no Mac OS X; é um dispositivo específico do Linux.
A forma:
{var}<filename
fez o arquivo aberto shell filename
para leitura e arquivo de armazenamento número do descritor na variável var
. Não há espaço permitido entre {var}
operadores de redirecionamento e e o número do descritor de arquivo será maior ou igual 10
.
Esse recurso era original ksh
(da versão ksh93r em 2006), bash
copiado muito mais tarde em bash-4.1-alpha
2010. zsh
Também fez a alteração antes bash
de zsh 4.3.4
2007.
Isso é explicado na seção do manual Bash, em Redirecionamentos .
Cada redirecionamento que pode ser precedido por um número de descritor de arquivo pode ser precedido por uma palavra no formato { varname }. Nesse caso, para cada operador de redirecionamento, exceto
>&-
e<&-
, o shell alocará um descritor de arquivo maior que 10 e o atribuirá a { varname }. Se>&-
ou<&-
for precedido por { varname }, o valor de varname definirá o descritor de arquivo a ser fechado.