ฉันต้องการวนลูปผลลัพธ์ของคำสั่งโดยไม่สร้าง sub-shell หรือใช้ไฟล์ชั่วคราว
เวอร์ชันเริ่มต้นของสคริปต์ของฉันมีลักษณะเช่นนี้ แต่สิ่งนี้ไม่ทำงานเนื่องจากจะสร้าง subshell และexit
คำสั่งจะยกเลิก subshell แทนสคริปต์หลักที่ต้องการ เป็นส่วนหนึ่งของสคริปต์ที่มีขนาดใหญ่กว่ามากเพื่อกำหนดค่าการกำหนดเส้นทางนโยบายและจะหยุดการทำงานหากตรวจพบเงื่อนไขที่จะทำให้การกำหนดเส้นทางล้มเหลว
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
ดังนั้นหนึ่งในทางเลือกที่แนะนำคือการใช้คำสั่งเช่นนี้เพื่อหลีกเลี่ยงการ subshell
while read BLAH ; do echo $BLAH; done </root/regularfile
ดังนั้นสำหรับฉันแล้วฉันควรจะใช้คำสั่งเช่นนี้เพื่อหลีกเลี่ยงการ subshell และยังได้รับผลลัพธ์จากโปรแกรมที่ฉันต้องการ
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')
ฉันสามารถบันทึกผลลัพธ์ของคำสั่งนั้นเป็นไฟล์ชั่วคราวและใช้การเปลี่ยนเส้นทางในไฟล์ชั่วคราว แต่ฉันต้องการหลีกเลี่ยงการทำเช่นนั้น
เหตุใดการเปลี่ยนเส้นทางจึงทำให้ฉันมีข้อผิดพลาดและฉันมีตัวเลือกอื่น ๆ จากนั้นสร้างไฟล์ชั่วคราว