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.