如何将 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"

相关内容