bashmacosshellbcoptimathsat

Specific inputs of experiment return parser error


#!/bin/bash
for tracelength in 50 100 150 200 250 300 350 400 450 500 ; do
    step=0.2
    short=0
    long=1
    for i in {1..4}; do
    ratio=0
        for j in {1..4}; do
                declare -a listofresults
                echo "$tracelength $short $long $ratio" >> results.csv
                python3 main.py "$tracelength" "$short" "$long" "$ratio">file.smt2
                chmod 775 file.smt2
                declare total=0
                declare m=0
                for repeat in {1..10}; do
                    executiontime=$(timeout 500 gtime -f "%U" /Users/ouafaelachhab/Desktop/SemanticLocality/optimathsat-1.6.2-macos-64-bit/bin/optimathsat < file.smt2 2>&1 >/dev/null)
                    echo "$executiontime"
                    total=$(echo "scale=2; ($total) + ($executiontime)" | bc) #echo $(bc <<< "scale=2; $total/100")
                    echo "$total"
                    let "m=m+1"
                    echo "m=$m"
                done
                echo $(bc <<< "scale=2; ($total)/10") >> results.csv
                ratio=$(echo "scale=10; ($ratio) + ($step)" | bc) #float points arithmetics are different
            done
            short=$(echo "scale=10; ($short) + ($step)" | bc)
            long=$(echo "scale=10; ($long) - ($step)" | bc)
        done
    done

I am basically just running an experiment where I run a file with variant inputs. The code works for some values and for some it just gives me:

(standard_in) 1: parse error

In my results file this is the output I have:

50 0 1 0
21.82
50 0 1 .2
27.08
50 0 1 .4
40.89
50 0 1 .6

The experiment I am running always stops at the same input values(the last one printed in the output file) and then from there it's all parser errors! why does it do that? and how do I fixe it? I have tried multiple solution I found for similar questions(related to bc) here but none worked.


Solution

  • I suspect it's related to the following line:

    
    executiontime=$(timeout 500 gtime -f "%U" /Users/ouafaelachhab/Desktop/SemanticLocality/optimathsat-1.6.2-macos-64-bit/bin/optimathsat &1 >/dev/null)
    
    

    When I change your code with

    executiontime="ISSUE"

    I get this as output (notice how I S S U E is being printed line by line)

    
    m=3
    ISSUE
    (standard_in) 1: parse error (standard_in) 1: illegal character: I (standard_in) 1: illegal character: S (standard_in) 1: illegal character: S (standard_in) 1: illegal character: U