我正在写剧本,但我被困住了。
我有一个网址(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