Продолжить запуск сценария проверки npm после завершения теста в цикле bash [duplicate]

Почему это происходит?

Спецификация языка Java говорит, что:

Пустое заявление

Пустое утверждение ничего не делает.

EmptyStatement:
    ;

Выполнение пустой инструкции всегда выполняется нормально

Это по сути означает, что вы хотите выполнить пустую инструкцию, если a == b

if(a == b);

Что вы должны сделать:

Существует две основных решения этой проблемы:

  1. Вы можете избежать проблем с пустой инструкцией с помощью форматирования кода и окружающего материала внутри if с { и }. Сделав это, ваш пустой оператор будет намного читабельнее.
    if(a == b){
      ;
    }
    
  2. Вы также можете проверить инструменты, используемые для анализа статического кода, такие как: [/g6] Findbugs Checkstyle Pmd Они могут мгновенно выделить такие проблемы, как этот.

Я бы рекомендовал объединить оба решения.

26
задан Bhushan 20 September 2012 в 02:21
поделиться

3 ответа

Вы можете «поймать» ошибку, используя ||, и команда, которая должна выйти из состояния 0:

ls $PATH || echo "$PATH does not exist"

Поскольку сложная команда преуспевает, существует или нет $PATH, set -e не запускается, и ваш скрипт не выйдет.

Чтобы подавить ошибку беззвучно, вы можете использовать команду true:

ls $PATH || true

Чтобы выполнить несколько команд, вы можете использовать одна из составных команд:

ls $PATH || { command1; command2; }

или

ls $PATH || ( command1; command2 )

Просто убедитесь, что ничего не происходит внутри любой из составных команд. Одним из преимуществ второго примера является то, что вы можете отключить режим немедленного выхода внутри подоболочки, не влияя на его статус в текущей оболочке:

ls $PATH || ( set +e; do-something-that-might-fail )
35
ответ дан chepner 19 August 2018 в 04:00
поделиться
  • 1
    Спасибо за ответ. У меня все еще есть пара сомнений. Если команда ls завершается с ошибкой, она все равно печатает сообщение, что так и так происходит соло, но есть способ подавить это? Кроме того, в части OR есть способ выполнить 2 строки кода? – Bhushan 20 September 2012 в 04:18

Другой вариант - использовать trap, чтобы поймать сигнал EXIT:

trap 'echo "ls failed" ; some_rescue_action' EXIT
ls /non_exist
5
ответ дан leafei 19 August 2018 в 04:00
поделиться

одно решение будет проверять существование папки

function myLs() {
    LIST=""
    folder=$1
    [ "x$folder" = "x" ] && folder="."
    [ -d $folder ] && LIST=`ls $folder`
    echo $LIST
}

Таким образом, bash не сбой, если $folder не существует

2
ответ дан Majid Laissi 19 August 2018 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: