Я хочу перевести цикл на висновок команди, не створюючи підзагін і не використовуючи тимчасовий файл.
Початкова версія мого сценарію виглядала приблизно так, але це не працює, оскільки створює підшару, і exit
команда припиняє нижню частину замість необхідного основного сценарію. Це частина набагато більшого сценарію для налаштування маршрутизації політики, і він зупиняє виконання, якщо виявить умову, яка призведе до збою маршрутизації.
sysctl -a 2>/dev/null | grep '\.rp_filter' | while read -r -a RPSTAT ; do
if [[ "0" != "${RPSTAT[2]}" ]] ; then
echo >&2 "RP Filter must be disabled on all interfaces!"
echo >&2 "The RP filter feature is incompatible with policy routing"
exit 1
fi
done
Отже, однією із запропонованих альтернатив є використання такої команди, щоб уникнути нижньої частини.
while read BLAH ; do echo $BLAH; done </root/regularfile
Тому мені здається, що я також повинен мати можливість використовувати таку команду, щоб уникнути нижньої частини і все-таки отримати вихід з програми, яку я хочу.
while read BLAH ; do echo $BLAH; done <(sysctl -a 2>/dev/null | grep '\.rp_filter')
На жаль, використання цієї команди призводить до цієї помилки.
-bash: syntax error near unexpected token `<(sysct ...
Я дуже заплутався, оскільки це працює.
cat <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Я міг би зберегти вихід цієї команди у тимчасовий файл і використовувати переспрямування на тимчасовий файл, але я хотів уникнути цього.
Отже, чому перенаправлення дає мені помилку, і чи є у мене інші способи, ніж створення тимчасового файлу?