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