하위 셸을 만들거나 임시 파일을 사용하지 않고 명령 출력을 반복하고 싶습니다.
내 스크립트의 초기 버전은 다음과 같았습니다. 그러나 서브 쉘을 작성하므로 exit
명령 이 작동하지 않으며 명령은 필요한 기본 스크립트 대신 서브 쉘을 종료합니다. 정책 라우팅을 구성하는 훨씬 더 큰 스크립트의 일부이며 라우팅이 실패하는 조건을 감지하면 실행이 중지됩니다.
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
따라서 제안 된 대안 중 하나는 서브 쉘을 피하기 위해 이와 같은 명령을 사용하는 것입니다.
while read BLAH ; do echo $BLAH; done </root/regularfile
따라서 서브 쉘을 피하고 여전히 원하는 프로그램에서 출력을 얻으려면 이와 같은 명령을 사용할 수 있어야합니다.
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')
해당 명령의 출력을 임시 파일로 저장하고 임시 파일에서 리디렉션을 사용할 수는 있지만 그렇게하지 않으려 고했습니다.
그렇다면 리디렉션으로 인해 오류가 발생하는 이유는 무엇입니까? 임시 파일을 만드는 것 외에 다른 옵션이 있습니까?