Tôi muốn lặp qua đầu ra của lệnh mà không tạo shell phụ hoặc sử dụng tệp tạm thời.
Phiên bản ban đầu của tập lệnh của tôi trông như thế này, nhưng điều này không hoạt động vì nó tạo ra một lớp con và exit
lệnh chấm dứt lớp con thay vì tập lệnh chính được yêu cầu. Nó là một phần của tập lệnh lớn hơn nhiều để định cấu hình định tuyến chính sách và sẽ tạm dừng thực thi nếu phát hiện một điều kiện sẽ khiến việc định tuyến bị lỗi.
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
Vì vậy, một trong những lựa chọn thay thế được đề xuất là sử dụng một lệnh như thế này để tránh lớp vỏ con.
while read BLAH ; do echo $BLAH; done </root/regularfile
Vì vậy, dường như tôi cũng có thể sử dụng một lệnh như thế này để tránh lớp con và vẫn nhận được đầu ra từ chương trình tôi muốn.
while read BLAH ; do echo $BLAH; done <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Thật không may, sử dụng lệnh đó dẫn đến lỗi này.
-bash: syntax error near unexpected token `<(sysct ...
Tôi thực sự bối rối vì điều này không hoạt động.
cat <(sysctl -a 2>/dev/null | grep '\.rp_filter')
Tôi có thể lưu đầu ra của lệnh đó vào một tệp tạm thời và sử dụng chuyển hướng trên tệp tạm thời, nhưng tôi muốn tránh làm điều đó.
Vậy tại sao việc chuyển hướng lại gây ra lỗi cho tôi và tôi có bất kỳ tùy chọn nào khác sau đó tạo một tệp tạm thời không?