我想将我的所有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的日志不包含行尾字符,因此所有输出看起来都是相互连接的。 请帮忙。
答案 0 :(得分:0)
您不能将xargs
用于功能。这就是为什么你需要直接从stdin读取函数中的数据。使用read
执行此操作。下面有一个小例子。
功能:
dolog()
{
while read log_entry
do
echo "Jaky: `date`: $log_entry " >> $Log_File
done
}
用法:
your-command | dolog