0

我想将我的所有标准输出和错误转发到一个记录器脚本,该脚本使用一些额外的信息(例如 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 的日志不包含行尾字符,因此所有输出看起来都相互连接。请帮忙。

4

1 回答 1

0

你不能xargs用于函数。这就是为什么您需要直接从标准输入读取函数中的数据。使用read. 下面有一个小例子。

功能:

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

用法:

your-command | dolog
于 2013-01-26T07:23:35.880 回答