Bash에는 cmdline nft cmd와 스크립트에 문제가 있습니다

Bash에는 cmdline nft cmd와 스크립트에 문제가 있습니다

리눅스 민트.이름 없음 -r수확량5.15.0-56.dpkg-query -l bash수확량5.1.6우분투1.
내 스크립트는 다음과 같은 경우에 문제가 있는 출력을 보여줍니다.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에 대해 포크/exec를 수행하고 있다고 생각했기 때문에 이것을 시도했습니다.

관련 정보