Linux

遠端主機中的 grep 日誌文件

  • April 6, 2019

我正在嘗試在遠端主機的日誌文件中 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命令以正確的方式呼叫。

引用自:https://unix.stackexchange.com/questions/510853