O que 'exec {fd} / dev / watchdog' faz no Bash

25

Isso é literal, {fd} não é um marcador de posição. Eu tenho um script que faz isso, e não fornece nada, nem faz referência a {fd} em nenhum outro lugar. Isso é válido bash?

exec {fd}</dev/watchdog

    
por Gregg Leventhal 28.08.2015 / 21:45

3 respostas

32

Em vez de ter que escolher um descritor de arquivo e esperar que ele esteja disponível:

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

esta notação pede ao shell para escolher um descritor de arquivo que não esteja em uso no momento, abra o arquivo para leitura naquele descritor e atribua o número à variável dada ( fd ).

$ exec {fd}< /dev/watchdog
$ echo $fd
10
    
por 28.08.2015 / 21:55
10

O formulário:

{var}<filename

fez o shell abrir o arquivo filename para ler e armazenar o número do descritor de arquivo na variável var . Não há espaço permitido entre {var} e operadores de redirecionamento, e o número do descritor de arquivo será maior ou igual a 10 .

Esse recurso era original de ksh (da versão ksh93r em 2006), bash copiou muito mais tarde em bash-4.1-alpha de 2010. zsh também fez a alteração antes de bash de zsh 4.3.4 em 2007.

    
por 29.08.2015 / 04:52
1

Isso é explicado na seção do manual do Bash em Redirecionamentos .

Each redirection that may be preceded by a file descriptor number may instead be preceded by a word of the form {varname}. In this case, for each redirection operator except >&- and <&-, the shell will allocate a file descriptor greater than 10 and assign it to {varname}. If >&- or <&- is preceded by {varname}, the value of varname defines the file descriptor to close.

    
por 02.09.2015 / 21:28