2011-08-22 29 views
5

Come controllare la correttezza della sintassi contenuta nello script di shell ksh senza eseguirlo? Per chiarire il mio punto di vista: in perl possiamo eseguire il comando:script di Shell - controllare la sintassi

perl -c test_script.pl 

per verificare la sintassi. È qualcosa di simile a questo disponibile in ksh?

risposta

4

ksh -n

maggior parte della famiglia Borne Shell accetta -n. tcsh pure.

+0

Non sembra funzionare. Ho eseguito ksh -n test.sh ma non ha elencato l'errore di sintassi che c'era in test.sh – sachin

+0

Sì, funziona. Sono sicuro che non vi è alcun errore di sintassi. Se ci mostri lo script, possiamo analizzare se le tue aspettative di trovare un errore di sintassi sono corrette. – Jens

+1

Quindi prova con 'sh -n script'. Dovrebbe funzionare. Tuttavia, se il tuo errore di sintassi è in un nome di comando non valido, questo verrebbe catturato solo in fase di esecuzione. 'sh -n' controlla solo la sintassi della shell effettiva. – tripleee

1

ho fatto un piccolo test con il seguente codice:

#!/bin/bash 
if [ -f "buggyScript.sh" ; then 
    echo "found this buggy script" 
fi 

Nota il mancante] in se. Ora ho inserito

bash -n buggyScript.sh 

e il mancante] non è stato rilevato.

Il secondo script di test si presentava così:

#!/bin/bash 
if [ -f "buggyScript.sh" ]; then 
    echo "found this buggy script" 

Annotare il fi mancante alla alla fine del caso. Testare questo con

bash -n buggyScript.sh 

restituito

buggyScript.sh: line 5: syntax error: unexpected end of file 

Conclusione: test lo script con l'opzione n rileva alcuni errori, ma non tutti di loro. Quindi immagino che trovi davvero tutti gli errori solo durante l'esecuzione dello script.

1

I test che tu dici non è riuscito a rilevare errori di sintassi, dove non in errori di sintassi infatti ... eco è un comando (OK un builtin, ma pur sempre un comando) in modo ksh/bash non stanno andando a controllare l'ortografia/sintassi del tuo comando. Analogamente "[" è effettivamente un alias per il comando di test, e il comando aspetta la parentesi di chiusura "]" come parte della sua sintassi, non ksh/bash. Quindi -n fa quello che dice sulla lattina, non hai letto il barattolo correttamente! :-)

Problemi correlati