mercoledì 19 maggio 2010

Errori inspiegabili eseguendo bash script

Su sistemi Ubuntu Linux può accadere di ricevere errori inspiegabili durante l'esecuzione di script bash. Provando ad eseguire il seguente script, ad esempio:
 #!/bin/bash 

#testall.sh

nets=( 0 1 2 3 4 5 6 7 8 9 10 11 12 13 16 17 )
jobs=( 32 25 28 18 10 50 33 12 13 11 11 14 18 14 13 13 )

# get length of array
length=${#nets[@]}

# use for loop read all test values
for (( i=0; i<${length}; ++i ));
do
echo net_${nets[$i]}
./main ${jobs[$i]} net_${nets[$i]}
echo -e "\n"
done

exit 0
Non è presente alcun errore, eppure sui sistemi sopra citati, quando si digita il seguente comando sh testall.sh si ottiene questo messaggio di errore
 testall.sh: 3: Syntax error: "(" unexpected 
il problema è veramente molto subdolo e, quindi, di difficile soluzione.

Come detto quello in questione è uno script bash, /bin/sh è un link simbolico che normalmente fa riferimento a /bin/bash e se così fosse tutto dovrebbe funzionare a dovere. Purtroppo spesso /bin/sh fa invece riferimento al programma /bin/dash, e quindi la sintassi non viene interpretata correttamente e si ottiene un errore.

Per risolvere è sufficiente
  • modificare il link simbolico /bin/sh in modo che punti a /bin/bash
o, in alternativa,
  • rendere i nostri script eseguibili e lanciarli come segue ./testall.sh in questo modo il corretto interprete sarà automaticamente selezionato all'avvio dello script.

Nessun commento:

Posta un commento