2014-10-02 40 views
0

可能在這裏丟失了一些簡單的東西,但我不是shell腳本專家。awk命令的別名 - 太多的引號

我有一個完美的本地命令。

tail -f /path/to/file | awk ' 
    /INFO/ {print "\033[32m" $0 "\033[39m"} 
    /ERROR/ {print "\033[31m" $0 "\033[39m"} 
    /WARNING/ {print "\033[33m" $0 "\033[39m"} 
' 

如果我ssh到我的盒子,並將其粘貼,它工作得很好。但我似乎無法將其別名,因爲它已經在使用兩種引號,所以alias='...'將無法​​使用。我也試圖使之成爲一個功能:

function tailMyFile { 
    tail -f /path/to/file | awk ' 
    /INFO/ {print "\033[32m" $0 "\033[39m"} 
    /ERROR/ {print "\033[31m" $0 "\033[39m"} 
    /WARNING/ {print "\033[33m" $0 "\033[39m"}'; 
} 

還告訴我:-bash: /INFO/: No such file or directory

+2

來自bash的這個錯誤意味着它沒有將'/ INFO /'視爲出於某種原因在單引號的awk腳本中。 – 2014-10-02 19:44:04

回答

1

嘗試函數的定義是這樣的:

tailMyFile() { 
    tail -f /path/to/file | awk ' 
    /INFO/ {print "\033[32m" $0 "\033[39m"} 
    /ERROR/ {print "\033[31m" $0 "\033[39m"} 
    /WARNING/ {print "\033[33m" $0 "\033[39m"}'; 
} 

但是,好像你的錯誤是不涉及如何定義函數,但是/ INFO /目錄是否正確顯示,您是否可以在沒有任何問題的情況下使用cd /INFO

+3

改進:將'/ path/to/file'改爲'$ 1',並將文件路徑作爲參數傳遞給函數(即'tailMyFile/path/to/file')。那麼你可以使用任何文件的功能,而不只是一個。 – isedev 2014-10-02 19:21:05

+0

@Isaac給了我一個'意外的令牌附近的'語法錯誤'(''。我試着用'function'作爲前綴,但是這給了我和原來一樣的錯誤 – diplosaurus 2014-10-02 19:32:42

+3

這裏的代碼段是一個完全有效的函數。 shell不喜歡那樣的東西是錯誤的 – 2014-10-02 19:43:13