2010-06-29 64 views
9

Tôi có hai tập lệnh bash gần như giống hệt nhau. Một công trình và một không và tôi không thể tìm ra những gì đang xảy ra. Dưới đây là các kịch bản:Lỗi Standard_in trong tập lệnh bash

Cái này hoạt động tốt:

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

Nhưng, lần này mang lại cho tôi tất cả các loại lỗi:

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

Hai tập tin giống hệt nhau bên cạnh những thư mục (Earthmoving vs Dọc) và tên chương trình (earthmove vs vertical). Tôi biết điều này bởi vì tôi tạo ra thứ hai bằng cách sao chép và dán đầu tiên. Chạy tập lệnh thứ hai dẫn đến kết quả này:

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. 

Có rất nhiều dòng khác có chữ "...", nhưng về cơ bản chúng chỉ là một biến thể trên cùng một ý tưởng.

+0

'đứng' là gì? 'earthmove' là gì? – wilhelmtell

+0

Bạn có thể tự chạy '$ CURDIR/Release/vertical' bằng tệp' flatroad' không? Điều đó có tạo ra tất cả các lỗi giống nhau không? –

+0

dọc và earthmove là hai chương trình C++. Và có, chạy "vertical -f flatroad.csv" từ dòng lệnh hoạt động tốt. – Jessica

Trả lời

0

Kiểm tra nội dung của thư mục Dọc. Một trong các tệp CSV của bạn có dấu cách hoặc ký tự lẻ trong tên của nó không? Thử xung quanh biến chứa tên tệp trong dấu ngoặc kép:

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

Các tệp duy nhất hiện đang ở trong dọc/utest là flatroad.csv và flatroad.res. Tôi đã thử đề xuất của bạn và ngoài tất cả các lỗi khác, tôi cũng nhận được các thông tin sau: "Kiểm tra flatroad.csv" cat:/home/jessica/Documents/Development/road/Vertical/utest/flatroad. csv ".res: Không có tệp hoặc thư mục nào" – Jessica

+0

Tệp nào nằm trong/home/jessica/Documents/Development/road/Vertical/utest? Cũng thử bật chế độ tiết trong bash: $ thiết -v Bạn có thể tắt nó đi với "set + v" – pborenstein

9

Thông báo lỗi được tạo bởi bc. Vấn đề là có một cái gì đó giống như "S: S: N: I :: O: P ..." trong tệp "$ HOME/Documents/Development/road/Vertical/utest/$ file.res" không có trong tệp tương ứng được sử dụng trong tập lệnh khác. Rất có thể bạn mong đợi tệp đó chứa một giá trị số duy nhất thay vì bất kỳ giá trị nào trong đó bây giờ.

+0

flatroad.res (file chỉ res trong thư mục vào thời điểm này) chỉ chứa " 0,0 "(trừ dấu ngoặc kép) IS là một giá trị số duy nhất. – Jessica

+1

@Jessica: Sau đó, giá trị của '$ value' chứa thứ gì đó' bc' không hiểu. –

0

(standard_in) 1: lỗi cú pháp

Lỗi này sẽ được giải quyết bằng cách sử dụng perl thay vì lệnh bc,

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

Các vấn đề liên quan