
Linux ミント。uname -r は、収穫5.15.0-56。dpkg-クエリ -l bash収穫5.1.6 Ubuntu1私のスクリプトでは、
次のような場合にこの問題のある出力が表示されます。bash -x スクリプト呼び出された:
attrib =' '\''{type nat hook prerouting priority mangle+10;}'\'' '
しかし、コマンドラインから:
sudo nft create chain inet firewalld mangle_PREROUTING '{ type nat hook prerouting priority mangle + 10 ;}'
正常に動作します。
このスクリプトは、Fedora NFT ツリーを複製します。
x=$(sudo nft -a list tables)
if [[ $x != '' ]]; then
sudo nft flush table inet firewalld
sudo nft delete table inet firewalld
fi
sudo nft create table inet firewalld
for stage in mangle net filter;do
for step in _PREROUTING _OUTPUT _INPUT _IN_workstation; do
meat=${step/_/}
priority=${stage/_/}
a=${step/_[a-zA-Z]+/_}
b=${stage/_[a-zA-Z]+/_}
if [[ $stage =="__"]]; then
type="nat"
else
type="filter"
fi.
hook=${meat,,} #translate to all lowercase.
attrib=" '{ type "$type" hook "$hook" priority "$priority"+10;}'"
if[[ $a$b == "__" ]]; then
cmd=" insert rule inet firewalld $stage$step" ;
sudo nft $cmd
else
cmd=" create chain inet firewalld $stage$step $attrib";
sudo nft $cmd
fi
done
done
答え1
中括弧の周りの一重引用符を削除するのが答えでした。シェル スクリプト (および sudo) がシェル解釈なしで nft の fork/exec を実行していると考えたため、これを試しました。