스크립트를 작성 중인데 막혔어요.
나는 URL을 가지고 있습니다 (https://file.test.com/tips)에는 네트워크 서브넷 목록이 포함된 파일이 포함되어 있습니다.
문서 내용:
{192.168.1.0/24,10.0.0.0/24,2001:aaaa:bbbb:cccc::/64}
내가 달리려고 할 때
# firewall-cmd --permanent --zone=trusted --add-source="$(curl https://file.test.com/tips)"
알겠어요
Error: INVALID_ADDR: Zone 'trusted': invalid source '{192.168.1.0/24,10.0.0.0/24,2001:aaaa:bbbb:cccc::/64}'
달릴 때 잘 작동해요
# firewall-cmd --permanent --zone=trusted --add-source={192.168.1.0/24,10.0.0.0/24,2001:aaaa:bbbb:cccc::/64}
내가 뭘 잘못하고 있는지 아는 사람 있나요?
답변1
이전에 댓글을 달았지만 이는 bash 확장 문제에 가깝습니다. 따라서 올바른 방법은 루프를 사용하고 서브넷을 다음과 같이 분할하는 것입니다.,
#!/usr/bin/env bash
read_file=$(curl -s https://file.test.com/tips | sed 's/[{}]//g')
saveIFS=$IFS
IFS=',' read -ra subnets <<< "$read_file"
for subnet in "${subnets[@]}"
do
firewall-cmd --zone=trusted --add-source="$subnet" --permanent
done
firewall-cmd --reload
IFS=$saveIFS
eval
또는 또 다른 옵션은printf '%q' "${subnet}"
eval
권장되지는 않지만 원하는 것에 대해서는 상당히 안전합니다.
eval firewall-cmd --permanent --zone=trusted --add-source="$(curl -s https://file.test.com/tips)" && firewall-cmd --reload