2011-11-03 168 views
0

我想在bash shell腳本中使用系統命令。如果在AWK一些條件滿足更加具體, (工作節點的數量是17)我想 給我發電子郵件,我寫了下面的代碼:系統命令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:{如果($ 90元== 17)系統(「mailx的-s一切
AWK:^未終止的字符串

我認爲是有關如何指定郵件正文中的問題,我不要 知道如何做到這一點。我曾嘗試切斷一些方法來解決錯誤,但沒有成功。

關於。

回答

0

我發現問題,它與單引號無關。實際上,我使用的是像'showq'這樣的命令,但是必須以這種方式使用命令的整個路徑:'/ opt/moab/bin/showq'在crontabs中。

謝謝。

0

您正在使用awk命令的單引號,並且在它們內部,文本的單引號應該使用反斜槓進行轉義。

2

正如其他2個答案所述,問題在於你使用單引號。不幸的是,他們推薦的解決方案(反斜槓轉義單引號)不起作用。通過在單引號字符串中轉義單引號不能得到單引號。最簡單的解決方案是寫:

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

有趣,我不知道... –

+0

我按照你的建議輸入:system(「mailx -s \」一切正常「\」 [email protected] << EOF Message ... 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. 內換行 「網絡連接」 不適用於在awk