Иногда у меня возникают проблемы с сетевым подключением, и мне нужно повторно запустить предыдущую команду. Не знаете, как сделать заявление if else?

for var in ./*
do python2.7 submit.py $var
//check if output of previous do statement has word traceback
 if    
   python2.7 submit.py $var
 else
   //if it does not contain word traceback continue with the for loop
   continue??
done

1 ответ1

4

Предполагая, что вам не нужен вывод программы ни для чего другого, я бы сделал это так:

for var in ./*
do
  while ! python2.7 submit.py "$var" | grep -qFe traceback
  do
    echo "Trying again for $var ..."
  done
  echo "Succeeded for $var."
done

Если вывод программы невелик, может быть лучше перенаправить его в переменную и проверить это (потому что он сохраняет один форк +exec за итерацию):

for var in ./*
do
  while [[ "$(python2.7 submit.py "$var")" != *traceback* ]]
  do
    echo "Trying again for $var ..."
  done
  echo "Succeeded for $var."
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .