2011-08-19 3 views
0

bash 스크립트에서 변수를 nawk으로 전달하려고 시도했지만 실제로는 변수의 내용을 $commentValue으로 인쇄하지 않습니다. printf 구문의 마지막 부분을 제외한 모든 것이 훌륭하게 작동합니다. 감사!변수를 bash에서 nawk로 전달 하시겠습니까?

echo -n "Service Name: " 

read serviceName 

echo -n "Comment: " 

read commentValue 

for check in $(grep "CURRENT SERVICE STATE" $nagiosLog |grep -w "$serviceName" | nawk -F": " '{print $2}' |sort -u) ; do 
    echo $check | nawk -F";" -v now=$now '{ printf("[%u]=ACKNOWLEDGE_SVC_PROBLEM;"$1";"$2";2;1;0;admin;$commentValue"\n", now)}' >> $nagiosCommand 

done 

답변

1

$commentValuenawk에 대한 호출의 내부이기 때문에, 이것은 nawk의 변수에 bash하지 변수로 여겨진다. nawk에 그러한 변수가 없기 때문에 아무 것도 얻을 수 없습니다. now 변수와 마찬가지로 -v 스위치를 사용하여 먼저 "inside"변수 nawk을 전달해야합니다. 예 :

공백이 포함 된 $commentValue의 경우 따옴표를 사용하십시오.

+0

흠, 명령을 수정했지만 여전히 내용 대신 "commentValue"라는 단어를 인쇄합니다. echo $ check | nawk -F ";" -v now = $ now -v "commentValue = $ commentValue" '{printf ("[% u] = ACKNOWLEDGE_SVC_PROBLEM;"$ 1 ";"$ 2 "; 2; 1; 0; admin; commentValue \ n" '>> $ nagiosCommand – user63019

+0

다음과 같아야합니다 :''echo $ check | nawk -F ";" -v now = $ now -v "commentValue = $ commentValue" '{printf ("[% u] = ACKNOWLEDGE_SVC_PROBLEM;"$ 1 ";"$ 2 "; 2; 1; 0; admin; % s \ n" commentValue)} '>> $ nagiosCommand''. ''awk'' 매뉴얼의''printf'' 문서를 읽어보십시오. –

+0

아, 이런. 나는 그 일을 이전에했지만 뒤늦은 것을 "최후에했다. 고마워! – user63019