Ok, estou preso a trabalhar com um script de shell que precisa usar eval
(eu sei, eu sei, o mal definitivo, etc ...), mas estou tendo dificuldades para depurar alguns dos números de linha que estão sendo descartados por erros.
Por exemplo:
script.sh: eval: line 315: syntax error near unexpected token '('
A linha definitivamente não corresponde à linha 315 em script.sh
, pois isso não está relacionado ao erro. Então eu joguei novas linhas aleatórias para descobrir qual linha está originando o erro, e como você esperaria que fosse uma linha com uma declaração eval
.
No entanto, quando eu envio o código que está sendo passado para o eval
, ele nem contém 200 linhas, quanto mais 315+! Então, o que está acontecendo aqui? Existe uma maneira de usar utilmente os números de linha que estão sendo relatados, eles são de alguma forma baseados na posição em que a instrução eval
é executada ou algo assim? Eu não consigo ver um padrão até agora.
Se eu pudesse substituir todas as instruções eval
, mas infelizmente o código que está sendo passado é gerado dinamicamente (não a partir da entrada do usuário, não se preocupe!), e precisa ser capaz de manipular variáveis na mesmo escopo do resto do script, o que parece impedir o uso de echo "$commands" | sh
ou alternativas similares. Eu também tenho o problema de compatibilidade e, infelizmente, como o mal como é eval
está amplamente disponível.
Tags debugging shell-script