Bir alt kabuk oluşturmadan veya geçici bir dosya kullanmadan bir komutun çıktısı üzerinden döngü istiyorum.
Komut dosyamın ilk sürümü böyle görünüyordu, ancak alt kabuk oluşturduğundan ve exit
komut gerekli olan ana komut dosyası yerine alt kabuğu sonlandırdığından bu çalışmıyor . İlke yönlendirmesini yapılandırmak için çok daha büyük bir komut dosyasının bir parçasıdır ve yönlendirmenin başarısız olmasına neden olacak bir durum algılarsa yürütmeyi durdurur.
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
Dolayısıyla önerilen alternatiflerden biri, alt kabuktan kaçınmak için böyle bir komut kullanmaktır.
while read BLAH ; do echo $BLAH; done </root/regularfile
Bana öyle geliyor ki, alt kabuktan kaçınmak ve yine de istediğim programdan çıktı almak için böyle bir komut kullanabilmeliyim.
while read BLAH ; do echo $BLAH; done <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Ne yazık ki, bu komutu kullanmak bu hatayla sonuçlanır.
-bash: syntax error near unexpected token `<(sysct ...
Bu işe yaradığı için gerçekten kafam karıştı.
cat <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Bu komutun çıktısını geçici bir dosyaya kaydedebilir ve geçici dosyada yeniden yönlendirmeyi kullanabilirim, ancak bunu yapmaktan kaçınmak istedim.
Neden yeniden yönlendirme bana bir hata veriyor ve geçici bir dosya oluşturmaktan başka seçeneklerim var mı?