сделайте 'находят' возврат с ненулевым кодом выхода, если ошибка произошла

Да это возможно.

Можно установить мягкую фетровую шляпу на другом HDD. Во время установки просто необходимо выбрать хороший жесткий диск. Личинка, вероятно, обнаружит Вашу установку окон и добавит запись в конфигурацию личинки. В случае, что Ваша установка окон не обнаруживается, Вы сможете добавить новую запись в свою конфигурацию личинки.

Вот фетровая руководство по инсталляции, где Вы найдете, что вся необходимая информация устанавливает мягкую фетровую шляпу.

4
06.09.2014, 02:02
2 ответа

Это вроде как:

#!/bin/bash
RESULT=0
while IFS= read -r -u3 -d $'\0' file; do
        echo -n "building $file ..."
        ant -f "$file" build &&
           echo "success" ||
           { echo "failure" ; RESULT=1 ; break; }
done 3< <(find path-a path-b path-c  -print0)

echo "result was $RESULT"

Обратите внимание, что он смешивает find с циклом bash , как показано здесь .

Он не использует $? , но вместо этого напрямую использует переменную $ RESULT .

Если все идет нормально $ RESULT - 0, иначе - 1. Цикл прерывается, как только обнаруживается ошибка.

Он должен быть защищен от вредоносных имен файлов (из-за использования -print0 ).

4
27.01.2020, 20:55

Если вы выполняете команду поиска, вам придется выполнить сложную работу по установке кода выхода. Это потому, что у вас есть 2 типа входных данных (на данный момент можно забыть о возможностях) с двумя типами заданий:

  1. Путь (пути) к файлам, которые вы хотите найти. Например, вы, вероятно, не захотите выйти с ошибкой, если вы find / mnt / log / storage / place -type f -mtime +7 -print . Вероятно, в вашем хранилище журналов есть файлы, срок хранения которых не превышает 7 дней, поэтому пропустить их - не ошибка - это ваше намерение. БУДЕТ ошибкой, если вы вообще не смогли попасть по пути / mnt / log / storage / place .
  2. Выражение, управляющее действиями find. Элементы в выражении могут быть истинными или ложными. Для целей -exec это истина, если выполняемая команда возвращает 0, и ложь, если она возвращает ненулевое значение. Изменение поведения -exec сделало бы его уникальным среди всех других элементов выражения в find и, вероятно, сломало бы множество существующих скриптов в мире.

Итак, к другому решению вашего вопроса: вы могли бы сделать что-то похожее на цикл LatinSuD while , в котором вы проверяете статус своей команды по переменной, но намного проще:

errorout=$(find /tmp -type f \( -exec bash -c '/tmp/doit 1>/tmp/stdoutfile' \; -o -quit \) 2>&1 )

If сценарий / tmp / doit не является исполняемым или производит вывод в stderr, переменная errorout будет заполнена. Протестируйте ошибку и отреагируйте так:

[ -n "$errorout" ] || { echo 'Oh no- an error from find!'; /do/something/else; }

Для однострочника вы можете сделать следующее:

errorout=$(find /tmp -type f \( -exec bash -c '/bin/false || { echo "error" 1>&2; exit 1; }' \; -o -quit \) 2>&1 )

Замените / bin / false командой по вашему выбору. Вы можете выполнить список команд следующим образом:

errorout=$(find /tmp -type f \( -exec bash -c '{ command1 && command2 && command3; } || { echo "error" 1>&2; exit 1; }' \; -o -quit \) 2>&1 )

И если вы не хотите немедленно выходить после первого сбоя команды в вашем списке:

errorout=$(find /tmp -type f \( -exec bash -c '{ command1; command2; command3; } || { echo "error" 1>&2; exit 1; }' \; -o -quit \) 2>&1 )

... не забудьте точки с запятой перед закрывающими фигурными скобками в командные строки.

0
27.01.2020, 20:55

Теги

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