^ SSH를 통해 호출할 때 awk에서 구문 오류가 발생함

^ SSH를 통해 호출할 때 awk에서 구문 오류가 발생함

/var한 호스트에서 여러 원격 호스트까지 파일 시스템 사용량이 80%를 초과하는지 감지하기 위해 filesystem Usage 명령을 실행하고 있습니다 .

내 명령은 잘 실행되지만( df -h /var | awk '$1 > 80') ssh구문 오류가 발생합니다.

for i in `cat /etc/gridhosts`; do ssh -n -o BatchMode=yes ${i} "df -h /var | awk '$4 > 80'" ; done
awk:  > 80
awk:  ^ syntax error
awk:  > 80
awk:  ^ syntax error
awk:  > 80

답변1

문제는 프로그램이 큰따옴표로 묶인 문자열의 일부 $4라는 것입니다. awk큰따옴표로 묶여 있기 때문에 (기본) 쉘은 호출하기 전에 확장합니다 ssh.

셸에서 $4이는 네 번째 위치 매개변수이며 비어 있을 수 있습니다. 이는 코드가 빈 문자열로 대체되어 잘못된 프로그램이 생성됨을 $4의미 awk합니다 awk.

awk이 경우 원격 호스트에서 명령을 실행할 필요가 없습니다 . 대신 그냥 하세요

while IFS= read -r remote; do
    ssh -n -o BatchMode=yes "$remote" 'df /var' | awk 'FNR == 2 && $5 > 80'
done </etc/gridhosts

일반적으로 백분율이 표시되는 곳이므로 모든 줄 대신 줄 2를 보도록 awk코드를 변경했습니다 . 또한 for 옵션 은 필요하지 않았기 때문에 제거했고 , 루프 헤더에서 파일의 전체 내용을 확장하는 대신 루프가 입력 파일을 한 줄씩 읽도록 했습니다 (이는 우아하지 않고 루프에서 작동하지 않습니다). 일반적인 경우 메모리를 많이 소모하게 됩니다.)$5$4-hdffor

또한 클러스터 전체 작업을 훨씬 쉽게 만들 수 있는 Ansible 또는 유사한 소프트웨어를 평가하는 데 관심이 있을 수도 있습니다.

관련 정보