2010-06-29 6 views
9

J'ai deux scripts bash qui sont presque identiques. On travaille et on ne le fait pas et je n'arrive pas à comprendre ce qui se passe. Voici les scripts:Standard_in erreur dans le script bash

Celui-ci fonctionne très bien:

#!/bin/bash 

CURDIR=$HOME/Documents/Development/road/Earthmoving 
TOL=0.05 

echo -e "\nRunning Unit Tests" 
echo -e "------------------\n" 

for infile in $CURDIR/utest/*.csv 
do 
    file=$(basename $infile .csv) 
    echo -n " Test $file" 
    value=`$CURDIR/Release/earthmove -f $infile` 
    res=`cat $CURDIR/utest/$file.res` 
    if [ "$(echo "$res+$TOL*$res >= $value && $res-$TOL*$res <= $value" | bc)" -eq 1 ]; then 
    echo -e "\t\t PASSED." 
    else 
    echo -e "\t\t FAILED." 
    fi; 
done 

echo "" 

Mais celui-ci me donne toutes sortes d'erreurs:

#!/bin/bash 

CURDIR=$HOME/Documents/Development/road/Vertical 
TOL=0.05 

echo -e "\nRunning Unit Tests" 
echo -e "------------------\n" 

for infile in $CURDIR/utest/*.csv 
do 
    file=$(basename $infile .csv) 
    echo -n " Test $file" 
    value=`$CURDIR/Release/vertical -f $infile` 
    res=`cat $CURDIR/utest/$file.res` 
    if [ "$(echo "$res+$TOL*$res >= $value && $res-$TOL*$res <= $value" | bc)" -eq 1 ]; then 
    echo -e "\t\t PASSED." 
    else 
    echo -e "\t\t FAILED." 
    fi; 
done 

echo "" 

Les deux fichiers sont identiques en dehors du répertoire (Terrassement vs vertical) et le nom du programme (earthmove vs vertical). Je le sais parce que j'ai créé le second en copiant et en collant le premier. Exécution des résultats du deuxième script dans ceci:

Running Unit Tests 
------------------ 

Test flatroad(standard_in) 1: illegal character: S 
(standard_in) 1: syntax error 
(standard_in) 1: illegal character: : 
(standard_in) 2: illegal character: S 
(standard_in) 2: illegal character: : 
(standard_in) 2: syntax error 
(standard_in) 2: illegal character: N 
(standard_in) 2: illegal character: : 
(standard_in) 2: illegal character: I 
(standard_in) 2: illegal character: : 
(standard_in) 2: illegal character: : 
(standard_in) 2: illegal character: O 
(standard_in) 2: illegal character: : 
(standard_in) 3: illegal character: P 
(standard_in) 3: illegal character: : 
(standard_in) 3: syntax error 
(standard_in) 3: illegal character: M 
(standard_in) 3: illegal character: : 
(standard_in) 3: illegal character: H 
(standard_in) 3: illegal character: : 
(standard_in) 3: illegal character: : 
(standard_in) 4: illegal character: P 
(standard_in) 4: illegal character: : 
(standard_in) 4: syntax error 
(standard_in) 4: illegal character: M 
(standard_in) 4: illegal character: : 
(standard_in) 4: illegal character: H 
(standard_in) 4: illegal character: : 
(standard_in) 4: illegal character: : 
(standard_in) 5: syntax error 
(standard_in) 5: illegal character: : 
(standard_in) 6: illegal character: P 
(standard_in) 6: illegal character: : 
(standard_in) 6: illegal character: M 
(standard_in) 6: syntax error 
(standard_in) 6: illegal character: : 
(standard_in) 7: syntax error 
(standard_in) 7: illegal character: : 
(standard_in) 8: illegal character: P 
(standard_in) 8: illegal character: : 
(standard_in) 8: syntax error 
(standard_in) 8: illegal character: M 
(standard_in) 8: illegal character: : 
(standard_in) 15: syntax error 
(standard_in) 16: syntax error 
(standard_in) 16: illegal character: M 
(standard_in) 16: illegal character: I 
(standard_in) 16: illegal character: P 
(standard_in) 17: syntax error 
(standard_in) 18: illegal character: T 
(standard_in) 18: illegal character: S 
(standard_in) 18: illegal character: T 
(standard_in) 18: syntax error 
(standard_in) 19: illegal character: T 
(standard_in) 19: illegal character: S 
(standard_in) 19: illegal character: T 
(standard_in) 19: syntax error 
(standard_in) 20: illegal character: T 
(standard_in) 20: illegal character: S 
(standard_in) 20: illegal character: T 
(standard_in) 20: syntax error 
(standard_in) 21: illegal character: T 
. 
. 
. 
(standard_in) 90: illegal character: I 
(standard_in) 90: illegal character: O 
(standard_in) 90: syntax error 
(standard_in) 90: illegal character: P 
(standard_in) 90: illegal character: I 
(standard_in) 90: illegal character: I 
(standard_in) 90: illegal character: T 
(standard_in) 91: syntax error 
(standard_in) 91: syntax error 
(standard_in) 91: syntax error 
(standard_in) 91: syntax error 
(standard_in) 93: illegal character: S 
(standard_in) 93: syntax error 
(standard_in) 94: illegal character: O 
(standard_in) 94: syntax error 
(standard_in) 95: syntax error 
(standard_in) 96: illegal character: U 
(standard_in) 96: syntax error 
(standard_in) 96: illegal character: ' 
(standard_in) 96: illegal character: O 
(standard_in) 96: illegal character: ' 
       FAILED. 

Il y a beaucoup d'autres lignes où le « ... » est, mais ils sont fondamentalement juste une variation sur la même idée.

+0

quoi de' vertical'? Qu'est-ce que 'earthmove'? – wilhelmtell

+0

Etes-vous capable d'exécuter '$ CURDIR/Release/vertical' par lui-même, avec le fichier' flatroad'? Est-ce que cela produit toutes les mêmes erreurs? –

+0

vertical et earthmove sont deux programmes C++. Et oui, exécuter "vertical -f flatroad.csv" à partir de la ligne de commande fonctionne très bien. – Jessica

Répondre

0

Vérifiez le contenu du répertoire vertical. L'un de vos fichiers CSV contient-il des espaces ou des caractères impairs dans son nom? Essayez autour de la variable qui contient un nom de fichier entre guillemets:

"\"${filename}\"" 
+0

Les seuls fichiers actuellement dans Vertical/utest sont flatroad.csv et flatroad.res. J'ai essayé votre suggestion, et en plus de toutes les autres erreurs, je reçois maintenant aussi ce qui suit: "Test flatroad.csv" cat:/home/jessica/Documents/Développement/route/Vertical/utest/flatflatroad. csv ".res: Aucun fichier ou répertoire" – Jessica

+0

Quels fichiers se trouvent dans/home/jessica/Documents/Development/road/Vertical/utest? Essayez aussi de le mode bavard en bash: $ de set -v Vous pouvez la désactiver par « set + v » – pborenstein

9

Les messages d'erreur sont produits par bc. Le problème est qu'il y a quelque chose comme "S: S: N: I :: O: P ..." dans le fichier "$ HOME/Documents/Développement/route/Vertical/utest/$ fichier.res" qui n'est pas dans le fichier correspondant utilisé dans l'autre script. Les chances sont que vous vous attendez à ce que ce fichier contienne une seule valeur numérique au lieu de ce qui s'y trouve maintenant.

+0

flatroad.res (le seul fichier .res dans le répertoire à ce moment) ne contient que " 0.0 "(moins les guillemets) qui est une seule valeur numérique. – Jessica

+1

@Jessica: Alors la valeur de '$ value' contient quelque chose que' bc' ne comprend pas. –

0

(standard_in) 1: erreur de syntaxe

Cette erreur sera résolu en utilisant perl au lieu de commande bc,

$ (perl -e « print $ b + $ c ")