Erro de redirecionamento do shell secundário com variável (enquanto…) $ 3 $ testdir / $ testfile.log

2

Meus scripts executam o comando sub shell ao longo das linhas de:

 ( while ..... ) $3>$testdir/$testfile.log

Eu recebo o erro:

line 75: syntax error near unexpected token '$3'
line 75: '    ) $3>$testdir/$testfile.log'

Eu tentei várias opções e parece que > só fica feliz quando é um número codificado e não uma variável. Estou perdendo um parêntese?

    
por Simply_Me 07.09.2015 / 11:43

2 respostas

1

Você está correto, a sintaxe do shell só permite algo como

'# >'

em que # é um dígito único.

Um shell pode suportar números de vários dígitos, mas o comportamento não é especificado pelo POSIX.

Ser capaz de fazer expansões variáveis aqui seria muito além da sintaxe especificada.

No entanto, você pode usar eval para expandir o texto e, em seguida, chamar o analisador novamente.

    
por 07.09.2015 / 11:49
1

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.

    
por 08.09.2015 / 02:25