Bash将标准输出重定向到函数
我有两个日志函数:Bash将标准输出重定向到函数,bash,logging,stdout,Bash,Logging,Stdout,我有两个日志函数: log_msg() { if [ ! -e $LOG_FILE ]; then touch $LOG_FILE chmod 0640 $LOG_FILE fi echo "$(date +'[%Y-%m-%d %T]') $1" >> $LOG_FILE } log_stream() { while read data; do printf "$(date +'[%Y-%m-%d %
log_msg()
{
if [ ! -e $LOG_FILE ]; then
touch $LOG_FILE
chmod 0640 $LOG_FILE
fi
echo "$(date +'[%Y-%m-%d %T]') $1" >> $LOG_FILE
}
log_stream()
{
while read data; do
printf "$(date +'[%Y-%m-%d %T]') $data" >> $LOG_FILE
done
}
要记录消息,请执行以下操作:
log_msg "Hello World!";
为了记录另一个函数的stdout,我尝试执行以下操作:
bgcommand --a --b 2>&1 > log_stream &
但它不起作用
我在这个问题上找到了记录管道的函数:
但是缺少了一些内容。您正在写入一个名为“log\u stream”的文件。shell没有在那里寻找程序/函数名。试试这个:
bgcommand --a --b 2>&1 | log_stream &
#......................^
或者,重定向到进程替换
bgcommand --a --b 2>&1 > >(log_stream) &
您可能需要查看名为的实用程序,其目的是向其输入添加时间戳。您正在写入名为“log\u stream”的文件。shell没有在那里寻找程序/函数名。试试这个:
bgcommand --a --b 2>&1 | log_stream &
#......................^
或者,重定向到进程替换
bgcommand --a --b 2>&1 > >(log_stream) &
您可能需要研究一个名为的实用程序,其目的是向其输入添加时间戳。似乎可以使用“|”。但我决定不使用它,因为这会影响“&”修改器,并且只在后台发送“log_stream”命令,而不是“bgcommand”。您能确认使用“|”不会影响管道中最后一个命令的“&”吗?
&
会将整个管道发送到后台。似乎可以使用“|”。但我决定不使用它,因为这会影响“&”修改器,并且只在后台发送“log_stream”命令,而不是“bgcommand”。您能确认使用“|”不会影响管道中最后一个命令的“&”吗?&
会将整个管道发送到后台如果您使用bash
4.2,您可以通过使用printf%%([%Y-%m-%d%T])T%s\n“$1避免调用date“
。如果您使用的是bash
4.2,则可以通过使用printf%%([%Y-%m-%d%T])T%s\n”“$1”来避免调用date
。