Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:将命令输出和时间戳追加到文件_Bash_Shell - Fatal编程技术网

Bash:将命令输出和时间戳追加到文件

Bash:将命令输出和时间戳追加到文件,bash,shell,Bash,Shell,通常在我的bash脚本中,我习惯于执行一些\u命令>>log.log。这很好,但是如何添加更多数据,如时间和命令名 我的目标是有一个这样的日志 2012-01-01 00:00:01 [some_command] => some command output... 2012-01-01 00:01:01 [other_command] => other command output... 进程应该同时运行和写入文件 William Pursell在我的案例中指出的最终解决方案是:

通常在我的bash脚本中,我习惯于执行
一些\u命令>>log.log
。这很好,但是如何添加更多数据,如时间和命令名

我的目标是有一个这样的日志

2012-01-01 00:00:01 [some_command] => some command output...
2012-01-01 00:01:01 [other_command] => other command output...

进程应该同时运行和写入文件

William Pursell在我的案例中指出的最终解决方案是:

some_命令2>&1 | perl-ne'$|=1;打印本地时间。“:[somme\u命令]$\u'>>/log.log&

我还添加了
2>&1
以将
STDOUT
STDERR
重定向到文件,并在末尾添加了一个
,以将程序保留在后台

谢谢大家!

类似这样:

(echo -n $(date); echo  -n " ls => ";  ls) >> /tmp/log
stamp () {
  ( echo -n "`date +%T` "
    "$@" ) >> logfile
}

stamp echo how now brown cow
但是,您的命令输出是多行的,并且它不会具有上面显示的格式。在这种情况下,您可能希望用诸如tr或sed之类的命令替换输出中的换行符。

一种方法是

另一个可能是这样的:

(echo -n $(date); echo  -n " ls => ";  ls) >> /tmp/log
stamp () {
  ( echo -n "`date +%T` "
    "$@" ) >> logfile
}

stamp echo how now brown cow

根据您的评论,您似乎希望多个进程同时写入文件,并且在每一行上都有一个时间戳。这样的事情可能就足够了:

some_cmd | perl -ne '$|=1; print localtime . ": [some_cmd] $_"' >> logfile
如果要调整日期的格式,请使用POSIX::strftime

some_cmd | perl -MPOSIX -ne 'BEGIN{ $|=1 }
   print strftime( "%Y-%m-%d %H:%M:%S", localtime ) . " [some_cmd] $_"' >> logfile

使用sed的替代解决方案是:

some_command 2>&1 | sed "s/^/`date '+%Y-%m-%d %H:%M:%S'`: [some_command] /" >> log.log &
它通过替换行“character”(^)的开头来工作。如果您不想依赖Perl,可能会派上用场。

在Ubuntu上:

sudo apt-get install moreutils
echo "cat" | ts
Mar 26 09:43:00 cat

很好用!非常感谢实际上,它只工作了一次,如果我执行第二个命令,它将根本不会执行。提示?:你是在异步运行它吗?(例如,使用
)如何确定它不起作用?可能是缓冲问题,但这应该可以正常工作;打印本地时间。“:[somme_command]$\u'>/log.log 2>&1&
我知道它们不起作用,因为我需要
killall
第一个来让第二个来完成它的工作(还有日志记录)。导致该问题的命令是一个python脚本(我可以稍后再处理)。但是有个问题。。。如果我在第二个位置启动dhcpd,它将输出到控制台而不是日志文件。尝试
some_command 2>&1|perl…>>log.log&