如何將 echo 語句輸出作為參數傳遞給函數?

如何將 echo 語句輸出作為參數傳遞給函數?

我只想將 echo 語句輸出作為 argument( ${1}) 傳遞給以下範例中的記錄器函數:

logfile=./testlog

`touch ${logfile}`

function logger(){
  echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}
}

echo "started executing script" | logger

答案1

Aside:logger是一個標準 Unix (POSIX) 實用程式。您可以選擇不同的名稱以避免混淆。

為一個程式你可以使用| xargs -d '\n' logger.這包括將函數重寫為腳本檔案的情況,必要時使用“shebang”行;然而,為該腳本提供所有正確的環境可能很困難。

對函數來說,傳遞參數的唯一方法就是傳遞參數。您可以編寫第二個函數來包裝第一個函數,我將其重命名logger1

logger1(){ echo "... $1" >>$file; }
logger2(){ read -r x; logger1 "$x"; }

echo this is some log info | logger2

或者你可以read先將你的函數作為輸入。您甚至可以編寫一個循環並讓它處理多行(如果提供),就像大多數系統中的真實日誌記錄工具所做的那樣。

答案2

將 echo 語句放在函數內。

logfile=./testlog

`touch ${logfile}`

function logger()
{
echo "$@"
echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}

}

logger "started executing scirpt"

相關內容