Chcę zapętlić wynik polecenia bez tworzenia podpowłoki lub korzystania z pliku tymczasowego.
Początkowa wersja mojego skryptu wyglądała tak, ale to nie działa, ponieważ tworzy podpowłokę, a exit
polecenie kończy podpowłokę zamiast wymaganego skryptu głównego. Jest to część znacznie większego skryptu służącego do konfigurowania routingu zasad i wstrzymuje wykonanie, jeśli wykryje warunek, który spowoduje, że routing się nie powiedzie.
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
Jedną z sugerowanych alternatyw jest użycie takiego polecenia, aby uniknąć podpowłoki.
while read BLAH ; do echo $BLAH; done </root/regularfile
Wydaje mi się więc, że powinienem także móc użyć takiego polecenia, aby uniknąć podpowłoki i nadal otrzymywać dane wyjściowe z programu, który chcę.
while read BLAH ; do echo $BLAH; done <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Niestety użycie tego polecenia powoduje ten błąd.
-bash: syntax error near unexpected token `<(sysct ...
Jestem naprawdę zdezorientowany, ponieważ to działa.
cat <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Mogłem zapisać dane wyjściowe tego polecenia w pliku tymczasowym i użyć przekierowania w pliku tymczasowym, ale chciałem tego uniknąć.
Dlaczego więc przekierowanie powoduje błąd i czy mam inne opcje niż utworzenie pliku tymczasowego?