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)}