2019-09-23 Обработка Результата Пайпом
Различия
Здесь показаны различия между двумя версиями данной страницы.
правила_разработки:как_не_надо_делать:2019-09-23_обработка_результата_пайпом [23.09.2019 11:44] nikolay_carbonsoft Approved(nikolay_carbonsoft 2019/09/23 11:44) |
правила_разработки:как_не_надо_делать:2019-09-23_обработка_результата_пайпом [19.10.2019 14:04] (текущий) admin Approved(admin 2019/10/19 14:04) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | **Нарушено правило:** StrongBash | ||
+ | |||
+ | **Задача:** Обойти все зоны, выдаваемые другой командой. | ||
+ | <code bash> | ||
+ | cloudfox dns info "$DNS_NAME" --zones | while read -r DNS_ZONE; do | ||
+ | .... | ||
+ | done | ||
+ | </code> | ||
+ | |||
+ | **Ошибка:** Если при выполнении "cloudfox dns info" будет ошибка - она будет "заглушена", т.к. она в пайпе и не стоит set -o pipefail. | ||
+ | |||
+ | **Как надо делать:** StrongBash предлагает такие варианты: | ||
+ | <code bash> | ||
+ | Вы можете: | ||
+ | 1. Или использовать промежуточную переменную ret=$( $cmd ) | ||
+ | 2. Или использовать строкой выше set -o pipefail cmd set +o pipefail (кроме использования в if $cmd | cmd2) | ||
+ | 4. Или если Вы считаете код достаточно надежным для конкретного случая, добавьте || true в конце | ||
+ | 5. Или комментарий строкой выше # skip strongbash034 | ||
+ | </code> | ||
+ | |||
+ | Я сделал так: | ||
+ | <code bash> | ||
+ | cloudfox dns info "$DNS_NAME" --zones >/tmp/cf_script.tmp.$$ | ||
+ | while read -r DNS_ZONE; do | ||
+ | .... | ||
+ | done < /tmp/cf_script.tmp.$$ | ||
+ | rm -f /tmp/cf_script.tmp.$$ | ||
+ | </code> | ||
+ | |||
+ | ~~OWNERAPPROVE~~ | ||
+ | /*Не удаляйте эту строку и ниже!*/ | ||
+ | {(rater>id=1|name=Прочитал_правила_разработки:как_не_надо_делать:2019-09-23_обработка_результата_пайпом|type=vote|trace=user|tracedetails=1)} | ||