웹 페이지에서는 다음과 같이 설명합니다.
nftables 가이드
; = more commands or parameters to follow
\ = break a rule into multiple lines
명령의 경우:
nft add chain ip traffic-filter output { type filter hook output priority 0 \; policy accept\; }
나는 그것을 다음과 같이 읽었다.
nft add chain ip traffic-filter output {
type filter hook output priority 0 ;
policy accept ;
}
나를 혼란스럽게 만드는 것은 다음과 같이 줄을 끊기 위해 \
뒤에 두지 않는 이유 입니다.:
nft add chain ip traffic-filter output { type filter hook output priority 0 ;\ policy accept ; \}
?
답변1
이것은 아무 관련이 없습니다nftables구문이지만 POSIX 셸 구문의 경우: ;
이스케이프해야 합니다. 그렇지 않으면 셸은 구분 기호가 있다고 생각하고 새 셸 명령이 뒤따릅니다.
이 표현식은 셸에서 실행됩니다.
nft add chain ip traffic-filter output { type filter hook output priority 0 \; policy accept\; }
셸에 있는 다음 표현식과 동일합니다.
nft add chain ip traffic-filter output '{ type filter hook output priority 0 ; policy accept; }'
또는 많은 유사한 가능성 중 하나입니다( nft
매개변수 분할 자체를 수행하므로 매개변수가 그룹화되는 방식은 중요하지 않습니다).
nft 'add chain ip traffic-filter output { type filter hook output priority 0 ; policy accept; }'
탈출구가없는쉘용이런 일이 발생할 수 있습니다:
# nft add chain ip traffic-filter output { type filter hook output priority 0 ; policy accept; }
bash: syntax error near unexpected token `}'
오류는 에서 발생하지 bash
않습니다 nft
.
어느무작위 비공식 문서맹목적으로 신뢰하지 마십시오. 이 문자의 사용은 \
매뉴얼 페이지(nft(8)
):
어휘 규칙
입력은 한 줄씩 구문 분석됩니다.행의 마지막 문자(개행 문자 앞)가 인용되지 않은 백슬래시(
\
)인 경우 다음 행은 연속으로 간주됩니다.. 같은 줄에 있는 여러 명령은;
세미콜론( )으로 구분할 수 있습니다.파운드 기호(
#
)는 주석을 시작합니다. 같은 줄의 모든 후속 문자는 무시됩니다.식별자는 알파벳 문자(
a
-z
,A
-Z
)로 시작하고 그 뒤에 0개 이상의 영숫자 문자(a
-z
,A
-Z
,0
-9
)와 문자 슬래시(/
)가 옵니다.백슬래시(\
), 밑줄(_
) 및 점(.
). 다른 문자를 사용하거나 키워드와 충돌하는 식별자는"
큰따옴표( )로 묶어야 합니다 .
백슬래시가 어떻게 사용되는지 확인하세요.( \
)는 개행 문자 앞에만 특별한 의미가 있습니다.(위의 설명과 달리, /
자유롭게 받아들일 수 있는 곳을 찾지 못하더라도 \
). 문제가 생기고 싶지 않다면항상 작은따옴표( '
) 명령쉘 상호작용을 방지하고 내부적으로 적합하다고 생각되는 대로 수행하십시오. 그러나 이러한 작은따옴표 내에서 백슬래시 뒤에 공백이 오는 경우 다음과 같이 처리됩니다.둘명령의 일반 문자입니다 nft
.
따라서 몇 가지 옵션이 있습니다.
\
+ 사용새로운 팀단일 명령을 여러 줄로 분할;
여러 명령(또는 해당 구문이 포함된 명령의 일부)을 한 줄에 연결하는 데 사용됩니다 .a를
;
a로 교체하다새로운 팀두 연결을 분할하는 명령스크립트가 아닌 상호 작용할 때
nft -i
입력된 대화형 명령을 사용하여 쉘 상호 작용을 피하도록 선택할 수 있으므로 작동 방식을 볼 수 있도록 쉘과의 '' 또는 ';' 상호 작용을 피하는 데 특별한 주의가 필요하지 않습니다.그럼에도 불구하고 규칙 세트를 개발한 후에는 이를 파일에 저장하고 사용하는 것이 가장 좋습니다
nft -f
.
따라서 OP의 두 번째 예는 다음과 같이 작성할 수 있습니다(여전히 셸에서 실행됨).
nft 'add chain ip traffic-filter output { type filter hook output priority 0;\
policy accept;\
}
'
그러나 ;
연결과 행 연결이 모두 쓸모 없게 되면 다음과 같이 간단하게 만들 수 있습니다.
nft 'add chain ip traffic-filter output { type filter hook output priority 0
policy accept
}
'
백슬래시 뒤에 개행 문자가 오지 않으므로 다음 표기법은 유효하지 않습니다.
nft 'add chain ip traffic-filter output { type filter hook output priority 0 ;\ policy accept ; \}'
nft
버전 0.9.8에서는 위 문제와 관련하여 여러 오류가 발생합니다.
Error: syntax error, unexpected junk
add chain ip traffic-filter output { type filter hook output priority 0 ;\ policy accept ; \}
^
Error: syntax error, unexpected junk
add chain ip traffic-filter output { type filter hook output priority 0 ;\ policy accept ; \}
^
Error: syntax error, unexpected end of file
add chain ip traffic-filter output { type filter hook output priority 0 ;\ policy accept ; \}
^