我試圖從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
任何想法可能會發生這種情況?
我試圖從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
任何想法可能會發生這種情況?
逃離美元符號。
ssh host "awk '{print \$0}' /path/to/log.txt"
因爲單引號不保護$0
在本地端時,它會取代befor它發送到遠程側。
您也可以嘗試:
ssh host 'awk "{print \$0}" /path/to/log.txt'
這保護在遠程側$0
,但它需要更多的改變你的命令。
試試這個:
ssh host "awk '{print}' /path/to/log.txt"
它的工作原理,因爲$ 0是打印默認。
如果您的命令中有$,那麼在腳本文件中創建該命令會更簡單。那麼你可以這樣做:
ssh host < cmdfile #cmdfile contains the command
單引號不阻止變量擴展。腳本可以。
一種方式做到這一點不backslashing:
它使用這裏-docs的:
man bash | less +/'Here Documents'
切線:'AWK '{打印$ 0}' file' =='貓文件' –