2012-06-04 46 views
3

我試圖從awk的遠程計算機上的日誌中拉出一些數據,並注意到,如果我SSH入在機器上並運行

awk '{print $0}' /path/to/log.txt 

我得到預期的輸出(包含日誌消息,堆棧跟蹤等),但如果我跑

ssh host "awk '{print $0}' /path/to/log.txt" 

則輸出如下所示:

0 
1 
0 
0 
1 
1 
1 
1 
1 
1 

任何想法可能會發生這種情況?

+1

切線:'AWK '{打印$ 0}' file' =='貓文件' –

回答

6

逃離美元符號。

ssh host "awk '{print \$0}' /path/to/log.txt" 

因爲單引號不保護$0在本地端時,它會取代befor它發送到遠程側。

您也可以嘗試:

ssh host 'awk "{print \$0}" /path/to/log.txt' 

這保護在遠程側$0,但它需要更多的改變你的命令。

2

試試這個:

ssh host "awk '{print}' /path/to/log.txt" 

它的工作原理,因爲$ 0是打印默認。

如果您的命令中有$,那麼在腳本文件中創建該命令會更簡單。那麼你可以這樣做:

ssh host < cmdfile #cmdfile contains the command 

單引號不阻止變量擴展。腳本可以。

5

一種方式做到這一點不backslashing:

​​

它使用這裏-docs的

man bash | less +/'Here Documents'