Voglio passare in rassegna l'output di un comando senza creare una sotto-shell o utilizzando un file temporaneo.
La versione iniziale del mio script era simile a questa, ma non funziona poiché crea una subshell e il exit
comando termina la subshell anziché lo script principale richiesto. Fa parte di uno script molto più grande per configurare il routing delle politiche e interrompe l'esecuzione se rileva una condizione che causerà il fallimento del routing.
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
Quindi una delle alternative suggerite è quella di usare un comando come questo per evitare la subshell.
while read BLAH ; do echo $BLAH; done </root/regularfile
Quindi mi sembra che dovrei anche essere in grado di utilizzare un comando come questo per evitare la subshell e ottenere comunque l'output dal programma che desidero.
while read BLAH ; do echo $BLAH; done <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Sfortunatamente, l'utilizzo di quel comando provoca questo errore.
-bash: syntax error near unexpected token `<(sysct ...
Mi confondo molto perché funziona.
cat <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Potrei salvare l'output di quel comando in un file temporaneo e utilizzare il reindirizzamento sul file temporaneo, ma volevo evitare di farlo.
Quindi perché il reindirizzamento mi sta dando un errore e ho altre opzioni oltre alla creazione di un file temporaneo?