bash,如何将记录器脚本转换为函数

时间:2013-01-26 07:15:50

标签: linux bash logging exec

我想将我的所有stdout和errout转发到一个记录器脚本,该脚本使用一些额外的信息(如dateTime)记录它们,并且脚本导致错误。经过一些谷歌搜索后,我终于以这种方式编写了我的bash程序: 我在主脚本中添加了这两行:

exec  1> >(xargs ./doLog)
exec  2> >(xargs ./doLog)

./doLog在某种程度上是这样的:

if [ -n $1 ]
then
    echo -n "Jaky: `date`: $@ " >> $Log_File
fi

所以它需要来自1>的每个输入。和2>并将其回显给我的日志文件。 问题是由于某种原因,我需要将doLog脚本转换为执行相同结果的函数。但我不知道如何将exec 1和2的输入传递给函数。我尝试了xargs和其他文件描述符,但我无法得到结果。

另一个问题是传递给doLog的日志不包含行尾字符,因此所有输出看起来都是相互连接的。 请帮忙。

1 个答案:

答案 0 :(得分:0)

您不能将xargs用于功能。这就是为什么你需要直接从stdin读取函数中的数据。使用read执行此操作。下面有一个小例子。

功能:

dolog()
{
  while read log_entry
  do
   echo "Jaky: `date`: $log_entry " >> $Log_File 
  done
}

用法:

your-command | dolog