Erro de redirecionamento do traço exec

3

Isto:

set -x
rm -f p; mkfifo p
exec 99<>p

é bem sucedido no bash mas falha ( "99 not found" ) no traço.

Como faço para que funcione em traço?

    
por PSkocik 28.09.2015 / 13:32

1 resposta

5

O padrão POSIX derivado do Bourne Shell e seu descendente ksh88 menciona explicitamente que isso não é concedido ao trabalho. O motivo é a sintaxe da shell:

<>file

abre o stdin para leitura e escrita e:

[n]<>file

abre o descritor de arquivo n para leitura e escrita.

n , neste caso, é um dígito único.

Você usou o número 99 e este é um número de dois dígitos que está fora do intervalo especificado por POSIX. Portanto, o analisador não o viu como um número relacionado ao operador de redirecionamento, mas como um argumento separado. Então este argumento foi visto como o arquivo a ser executado por exec .

Se você gosta de scripts portáteis, siga o padrão POSIX e, se quiser escrever scripts totalmente portáteis, torne tudo 100% compatível com Bourne Shell.

Como não parece haver um motivo para usar 99 no seu caso, recomendo usar 9.

    
por 28.09.2015 / 13:58