Bash

bash 函式沒有完全顯示日期或 cat 參數

  • January 12, 2022

我正在編寫一個用於備份日誌儲存的 bash 腳本。

  • 我使用我定義的函式如下:
logit () {
   echo " $1  $2 "  >> /path/to/log
}
  • 因為logit 'Starting Backup' $(date +'%D %T')我得到這個輸出:
Starting Backup 01/11/22

所以時間失去了,顯然該stdout功能已經縮短了它。

  • 有了echo $(date +'%D %T')我也得到了時間stdout
  • 我還想將我的功能用於日誌,例如
logit 'DB-LOGS' $(cat /path/to/sql)

結果是

DB-LOG mysqldump:

同樣,這裡缺少一些標準輸出。

我應該更改或添加什麼功能以獲得完整的輸出?

雙引號命令替換:

logit 'Starting Backup' "$(date +'%D %T')"

沒有引號,結果$(date ...)會經過分詞和文件名通配。沒有縮短:假設$IFS仍設置為其預設值(其中包含空格字元),日期和時間作為單獨的參數傳遞給函式,時間結束於$3您不使用的時間。

您可以"$*"在腳本中使用將所有參數連接到一個字元串。

logit () {
   echo " $* "  >> /path/to/log
}

"$*"使用IFSas joiner 的第一個字元,預設為空格。)

或者,如果您想要每個 arg 周圍的額外空格,請使用printfwith "$@"

logit () {
   { printf " %s " "$@"; echo; } >> /path/to/log
}

(這裡,"$@"分別擴展到每個 arg,並printf根據需要多次重複格式字元串。echo添加最後的換行符。)

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