2010-06-29 11 views
9

Tengo dos scripts bash que son casi idénticos. Uno funciona y el otro no y no puedo entender qué está pasando. Estos son los guiones:Error de Standard_in en script bash

Ésta funciona 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 "" 

Pero éste me da todo tipo de errores:

#!/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 "" 

Los dos archivos son idénticos además del directorio (Pesada vs Vertical) y el nombre del programa (movimiento de tierra vs vertical). Lo sé porque creé el segundo copiando y pegando el primero. Ejecución de los resultados del segundo script de esta:

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. 

Hay muchas más líneas en el que el "..." es, pero son básicamente sólo una variación en la misma idea.

+0

¿Qué es' vertical'? ¿Qué es 'earthmove'? – wilhelmtell

+0

¿Eres capaz de ejecutar '$ CURDIR/Release/vertical' por sí mismo, con el archivo' flatroad'? ¿Eso produce todos los mismos errores? –

+0

vertical y earthmove son dos programas de C++. Y sí, ejecutar "vertical -f flatroad.csv" desde la línea de comandos funciona bien. – Jessica

Respuesta

0

Compruebe el contenido del directorio vertical. ¿Uno de sus archivos CSV tiene espacios o caracteres impares en su nombre? Intenta que rodea la variable que contiene un nombre de archivo entre comillas:

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

Los únicos archivos que se encuentran actualmente en Vertical/utest son flatroad.csv y flatroad.res. He intentado su sugerencia, y además de todos los otros errores, ahora también recibo lo siguiente: "Test flatroad.csv" cat:/home/jessica/Documents/Development/road/Vertical/utest/flatroad. csv ".res: No existe ningún archivo o directorio" – Jessica

+0

¿Qué archivos están en/home/jessica/Documents/Development/road/Vertical/utest? También intente encender el modo detallado en bash: $ configurar -v Puede apagarlo con "set + v" – pborenstein

9

Los mensajes de error se producen por bc. El problema es que hay algo así como "S: S: N: I :: O: P ..." en el archivo "$ HOME/Documents/Development/road/Vertical/utest/$ file.res" que no está en el archivo correspondiente que se usa en el otro script. Lo más probable es que espere que ese archivo contenga un único valor numérico en lugar de lo que está allí ahora.

+0

flatroad.res (sólo el archivo .res en el directorio en este momento) sólo contiene " 0.0 "(menos las comillas) que ES un único valor numérico. – Jessica

+1

@Jessica: Entonces el valor de '$ value' contiene algo que' bc' no comprende. –

0

(standard_in) 1: error de sintaxis

Este error se puede resolver utilizando Perl en lugar de comando aC,

$ (perl -e "impresión $ b + $ c ")

Cuestiones relacionadas