Bash 将标准输出重定向到函数
Bash redirect stdout to function
我有两个日志函数:
log_msg()
{
if [ ! -e $LOG_FILE ]; then
touch $LOG_FILE
chmod 0640 $LOG_FILE
fi
echo "$(date +'[%Y-%m-%d %T]') " >> $LOG_FILE
}
log_stream()
{
while read data; do
printf "$(date +'[%Y-%m-%d %T]') $data" >> $LOG_FILE
done
}
为了记录消息:
log_msg "Hello World!";
为了记录我尝试执行的另一个函数的标准输出:
bgcommand --a --b 2>&1 > log_stream &
但是没用。
我在这个问题上找到了记录管道的函数:
Pipe output to bash function
但是少了点什么。
您正在写入名为 "log_stream" 的文件。 shell 不是在寻找 program/function 名称。试试这个:
bgcommand --a --b 2>&1 | log_stream &
#......................^
或者,重定向到进程替换
bgcommand --a --b 2>&1 > >(log_stream) &
您可能需要查看名为 ts
的实用程序,其目的是向其输入添加时间戳。
我有两个日志函数:
log_msg()
{
if [ ! -e $LOG_FILE ]; then
touch $LOG_FILE
chmod 0640 $LOG_FILE
fi
echo "$(date +'[%Y-%m-%d %T]') " >> $LOG_FILE
}
log_stream()
{
while read data; do
printf "$(date +'[%Y-%m-%d %T]') $data" >> $LOG_FILE
done
}
为了记录消息:
log_msg "Hello World!";
为了记录我尝试执行的另一个函数的标准输出:
bgcommand --a --b 2>&1 > log_stream &
但是没用。
我在这个问题上找到了记录管道的函数: Pipe output to bash function 但是少了点什么。
您正在写入名为 "log_stream" 的文件。 shell 不是在寻找 program/function 名称。试试这个:
bgcommand --a --b 2>&1 | log_stream &
#......................^
或者,重定向到进程替换
bgcommand --a --b 2>&1 > >(log_stream) &
您可能需要查看名为 ts
的实用程序,其目的是向其输入添加时间戳。