2015-10-07 2 views
3

Я пишу скрипт bash для автоматизации некоторого кода opencv, который мне нужно запускать несколько раз в массиве переменных. По какой-то причине хотя мой скрипт bash продолжает сбой, когда я пытаюсь назначить 0 переменной. Я также пробовал это за пределами цикла if, а также вызывает сбой сценария.сбой сценария bash при присвоении переменной

#!/bin/bash 
set -e 

# Build most recent code 
cd build2/ 
cmake .. 
make 

Scale=(9 9) 

inputType="scale" 

flag=1 
counter=0 
for i in ${Scale[@]}; do 
    echo iteration: $counter 

    if [ $counter -eq 0 ] 
    then 
     echo first iteration 
     let flag=0 #Crashes Here 
     echo after assignment $flag 

    else 
     echo not first iteration 
     let flag=1 #Doesn't crash here 
     echo after assignment $flag 
    fi 

    echo starting program 
    #Note 1.inputValue 2.Input Type 3.firstGo 
    ./multiDimen ${i} $inputType $flag 

    echo Test Type is: $inputType 
    let counter=counter+1 
done 
echo Done 

Есть ли причина, почему это должно вести себя так?

+1

«Сбой» как? – tripleee

+0

он просто выйдет, без какого-либо сообщения об ошибке –

+0

после того, как я заменил let with = хотя он начал работать нормально, должно быть, было неправильным использованием, чтобы использовать его для назначения переменной 0? –

ответ

0

Попробуйте отменить let и просто использовать простое задание «=», пусть обычно это просто для арифметики, оно фактически совпадает с (()).

+0

безупречный !! спасибо –

0

человек установлен -e Выход немедленно, если простая команда завершается с ненулевым статусом, если команда, которая не не является частью до или во время цикла, часть , если заявление, часть & & или || список, или если статус возврата команды инвертируется с использованием!. -o errexit

man let Каждое выражение является арифметическим выражением, которое должно быть оценено. Если последнее выражение равно 0, пусть возвращает 1; в противном случае возвращается 0.

попробуйте удалить набор -e

3

С set -e, арифметической оценкой с нулевым результатом является «ошибкой», который вы должны справиться. Замена проблемного let с простым назначением устраняет арифметический контекст, поэтому, вероятно, вы должны это делать.

Вы должны по-прежнему просматривать остальную часть скрипта по аналогичным проблемам или отказаться от использования set -e, особенно если вы не являетесь экспертом по сценарию Bash. В частности, если программа, которую вы тестируете, может вернуть ненулевой код выхода, это все равно прекратит выполнение сценария.

+0

ah ok, это имеет смысл, я могу найти другую альтернативу set -e –

Смежные вопросы