我想创建一个简单的命令,将日期/时间,错误和标准输出记录到文件中。因此,如果我将文件移动到文件夹并显示“权限被拒绝”,则文件中会出现一行,显示当前日期/时间以及错误。
我知道如何将标准输出和命令错误写入文件,但是如何添加时间?预先感谢!
答案 0 :(得分:1)
所以您想像这样将stderr重定向到stdout:
2>&1
然后在每行的前面加上时间,就像这样(有点不客气,对不起):
sed "s/\(.\)/`date` \1/"
所以我们结束了这样的事情
2>&1 | sed "s/\(.\)/`date` \1/"
答案 1 :(得分:1)
以下一些代码可以提供帮助:
function add_date() {
while IFS= read -r line; do
echo "$(date): $line"
done
}
{
# Your code here
} 2>&1 | add_date >> $LOGFILE
这会将日期添加到代码输出的每一行的开头(无论如何在大括号之间)。
输出缓冲可能存在一些问题。这将在日志文件中的所有行上显示为相同的时间戳。
这是上面应用的代码的示例:
: ${LOGFILE:=logfile}
function add_date() {
while IFS= read -r line; do
echo "$(date): $line"
done
}
{
for a in {1..10}
do
echo $a
sleep 2
done
} 2>&1 | add_date >> $LOGFILE
结果:
$ cat logfile
Thu Mar 28 14:50:46 EDT 2019: 1
Thu Mar 28 14:50:48 EDT 2019: 2
Thu Mar 28 14:50:50 EDT 2019: 3
Thu Mar 28 14:50:52 EDT 2019: 4
Thu Mar 28 14:50:54 EDT 2019: 5
Thu Mar 28 14:50:56 EDT 2019: 6
Thu Mar 28 14:50:58 EDT 2019: 7
Thu Mar 28 14:51:00 EDT 2019: 8
Thu Mar 28 14:51:02 EDT 2019: 9
Thu Mar 28 14:51:04 EDT 2019: 10
答案 2 :(得分:1)
我使用一个函数来执行类似您所要求的操作
status_msg () {
echo "`hostname --short`:`date '+%m_%d_%Y_%H_%M_%S'`: $*"
}
可以通过
调用上述函数status_msg "This is a test line"
会导致
hostname:03_28_2019_13_50_31: This is a test line
或者,如果您正在运行产生输出的命令,则可以像这样使用它..
<command> 2>&1 | while read -r line
do
status_msg $line
done