Linux
遠端主機中的 grep 日誌文件
我正在嘗試在遠端主機的日誌文件中 grep 字元串。但我無法將回顯返回到執行腳本的主機。
#!/bin/bash #dt=$(date +"%Y%m%d") #HHMM=$(date '+%H:%M') key="keys/cash_prod_key" if ssh -o StrictHostKeyChecking=no -qni $key user@host "cat /var/log/FILE_send.log | grep FILENAME | grep -i success"\; then echo "Success" fi
我認為這不是最正確的方法。
問題是不正確的主機名。
相反,這個答案專注於如何以更好的方式編寫程式碼。
您不需要在遠端主機上執行完整的管道。在命令行上執行複雜的命令
ssh
很容易出錯,尤其是從引用的角度來看。反而:
#!/bin/bash key="keys/cash_prod_key" ssh_args=( -o StrictHostKeyChecking=no -qni "$key" user@host ) if ssh "${ssh_args[@]}" cat /var/log/FILE_send.log | grep -F 'FILENAME' | grep -q -i -F 'success' then echo 'Success' fi
這將僅
cat
在遠端主機上執行,然後在grep
本地執行這兩個命令。我還在命令中添加了
-F
標誌grep
,假設用作模式的字元串不是正則表達式,而是您想要搜尋的文字字元串。最後一個grep
用途-q
,因為我們實際上對查看輸出並不感興趣,只是對它是否包含字元串感興趣success
。為了更易於閱讀,我將 with 使用的參數
ssh
放入了一個稍後在呼叫中使用的數組中,並且我還通過在管道符號後插入換行符來縮短行數。該腳本在語法上仍然正確。另請注意,變數等的任何擴展都應始終使用雙引號,除非您知道在什麼情況下不需要。請注意,我假設該
ssh
命令以正確的方式呼叫。