我只想將 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"