2011-11-03 2 views
0

bash 쉘 스크립트에서 시스템 명령어를 사용하고 싶습니다. 내가 메시지를 얻을 입력하면시스템 명령어 bash

showq | grep nodes | awk '{if ($3 == 17) system("mailx -s 'Everything is Ok' [email protected] <<EOF Tranquiquis EOF") ; else print "some nodes are not working"; fi }' 

: AWK 몇 가지 조건이 충족되는 경우 , 더 구체적 인 내가 나에게 이메일을 보내 을 원하는 (작업 노드의 수는 17이다), 나는 다음과 같은 코드를 작성 :

AWK : {경우 ($ 3 == 17) 시스템 ("mailx의 -s 모든
AWK :.^종결되지 않은 문자열

내가 메시지 본문을 지정하는 방법에 관한 생각 문제 I 방법을 알아야합니다. 오류를 수정하는 방법은 있지만 성공하지는 못합니다.

안부.

답변

0

작은 따옴표와 아무 관련이 없습니다. 실제로, 나는 'showq'와 같은 명령을 사용하고 있었지만이 방법으로 명령의 전체 경로 을 사용해야합니다 : crontabs의 '/ opt/moab/bin/showq'.

감사합니다.

0

awk 명령에 작은 따옴표를 사용하고 그 안에는 작은 따옴표를 사용하여 백 슬래시로 이스케이프해야합니다.

2

기타 2 개의 답변에 언급했듯이 작은 따옴표를 사용하면 문제가 발생합니다. 불행히도, 그들이 제공하는 권장 솔루션 (작은 따옴표를 이스케이프 백 슬래시)가 작동하지 않습니다. 따옴표로 묶은 작은 따옴표 안에서 이스케이프 처리하여 작은 따옴표를 얻을 수 없습니다. 가장 쉬운 해결책은 다음과 같이 작성하는 것입니다.

 
system("mailx -s \"Everything is Ok\" ... 
+0

유효하지 않습니다 나는 그걸 모르고 ... –

+0

당신이 제안대로 입력 : system ("mailx -s \"다 괜찮아요 \ " [email protected] << EOF 메시지 ... EOF ") 오류가 발생했습니다 : -bash : 예기치 않은 토큰 근처에서 구문 오류가 발생했습니다." "mailx -s \"다 괜찮습니다 \ [email protected] << EOF 메시지 ... EOF " ' – armando

+0

이 컨텍스트에서 HEREDOC (<< EOF)을 실행하는 것이 가치가있는 것보다 더 많은 문제가 있습니다. 시스템을 사용해보십시오 ("echo Tranquiquis | mailx -s \"... \ "") –

0
showq | grep nodes | awk ' 
{ 
    if ($3 == 17) 
    system("mailx -s \47Everything is Ok\47 [email protected] <<eof" RS \ 
    "Tranquiquis" RS "eof") 
    else print "some nodes are not working" 
} 
' 
  1. 사용 진수 대신 작은 따옴표

  2. 당신은 그 히어 닥

  3. 내부의 줄 바꿈이 필요

  4. 의 탈출 "파이"는 재미있는 awk는

관련 문제