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

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

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

내 명령은 잘 실행되지만( 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.

셸에서는 $44번째 위치 매개변수가 비어 있을 가능성이 높습니다. 이는 코드 $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

모든 줄 이 아닌 두 번째 줄을 awk보도록 코드를 변경했습니다 . 왜냐하면 일반적으로 백분율이 위치하는 곳이기 때문입니다. 또한 필요하지 않기 때문에 옵션을 제거했으며 루프 헤더 에서 파일의 전체 내용을 확장하는 대신 루프가 입력 파일을 한 줄씩 읽도록 만들었습니다. 일반적인 경우에는 불필요하게 많은 메모리를 소모합니다.$5$4-hdffor

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

관련 정보