Да это возможно.
Можно установить мягкую фетровую шляпу на другом HDD. Во время установки просто необходимо выбрать хороший жесткий диск. Личинка, вероятно, обнаружит Вашу установку окон и добавит запись в конфигурацию личинки. В случае, что Ваша установка окон не обнаруживается, Вы сможете добавить новую запись в свою конфигурацию личинки.
Вот фетровая руководство по инсталляции, где Вы найдете, что вся необходимая информация устанавливает мягкую фетровую шляпу.
Это вроде как:
#!/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
).
Если вы выполняете команду поиска, вам придется выполнить сложную работу по установке кода выхода. Это потому, что у вас есть 2 типа входных данных (на данный момент можно забыть о возможностях) с двумя типами заданий:
find / mnt / log / storage / place -type f -mtime +7 -print
. Вероятно, в вашем хранилище журналов есть файлы, срок хранения которых не превышает 7 дней, поэтому пропустить их - не ошибка - это ваше намерение. БУДЕТ ошибкой, если вы вообще не смогли попасть по пути / mnt / log / storage / place
. -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 )
... не забудьте точки с запятой перед закрывающими фигурными скобками в командные строки.