A sintaxe da shell é limitada: o redirecionamento só pode ser indicado por um único dígito imediatamente antes do operador de redirecionamento. Você não pode ter vários dígitos¹, espaço intermediário ou um dígito resultante de uma expansão variável.
Se você tiver um número de descritor de arquivo em uma variável, poderá usar eval
para uni-lo em um fragmento de código de shell que executa um redirecionamento. Para evitar colocar uma grande parte do seu script em uma string eval
, use o exec
incorporado para executar o redirecionamento. Por exemplo, se este é o código com um número de descritor de arquivo codificado
( … ) 3>foo
então você pode usar este código para redirecionar para o descritor de arquivo indicado pela variável fd
:
( eval "exec $fd>foo"; … )
¹ Você pode apenas em alguns shells, que suportam isso como uma extensão.