Como verificar um script ksh para erros de sintaxe?

1
$ cat foo.sh 
#!/bin/ksh

echo foo
ehco foo2

Não avisa por erros:

$ /bin/ksh -n foo.sh 
$ echo $?
0

Pergunta: Como posso obter o "ksh -n" para me avisar sobre erros de sintaxe?

    
por evachristine 22.07.2014 / 10:39

2 respostas

1

Se você tivesse erros de sintaxe nesse script, você os veria no stderr. ksh -n é a coisa certa. Um exemplo:

$ cat script.ksh
touch tmpfile
for f in tmpfile   # missing "do"
  rm $f
done
$ ksh script.ksh
script.ksh: syntax error at line 3: 'rm' unexpected
$ ls -l tmp*
-rw-rw-r-- 1 glennj glennj 0 Jul 22 06:54 tmpfile
$ rm tmpfile
$ ksh -n script.ksh
script.ksh: syntax error at line 3: 'rm' unexpected
$ ls -l tmp*
ls: cannot access tmp*: No such file or directory

Então, o script foi analisado, mas não executado (o arquivo não foi criado)

    
por 22.07.2014 / 12:57
3

Este não é um erro de sintaxe para a sintaxe real do ksh, é um erro de sintaxe para um nome de comando inválido que só é capturado no tempo de execução. Quando você executá-lo, você receberá o comando não encontrado erro.

Se você adicionar:

echo foo                                                                        
ehco foo2

if [ 1 -lt 0 ]                                                                  
then                                                                            
    echo 123                                                                    
done                                                                            

Em seguida, execute:

$ ksh -n foo.sh 
foo.sh: syntax error at line 9: 'done' unexpected
    
por 22.07.2014 / 12:56

Tags