如何在BASH脚本中添加时间戳?

时间:2015-06-23 15:22:22

标签: php linux bash shell timestamp

我有一个(BASH)shell脚本,可以执行多个PHP文件。当它们执行(几秒钟)时,它们产生输出。我试图从shell脚本捕获此输出并在每行上添加时间戳。

我很接近,但需要一些帮助。

考虑以下PHP脚本:

<?php
    echo("this is some output\n");
    sleep(1);
    echo("another line of output\n");
    sleep(3);   
    echo("final line of output\n\n");
?>

单独运行会产生此输出:

$ php ryan.php
this is some output
another line of output
final line of output

现在考虑以下shell脚本:

#!/bin/bash

shopt -s expand_aliases
alias date='date "+%a %d-%b-%Y %R:%S"'
alias stamp='sed "s/^/$(date)  /"'

php ryan.php | stamp
sleep 1

php ryan.php | stamp
sleep 1

exit 0

运行以下命令会产生以下输出:

$ ./test.sh
Tue 23-Jun-2015 10:14:48  this is some output
Tue 23-Jun-2015 10:14:48  another line of output
Tue 23-Jun-2015 10:14:48  final line of output
Tue 23-Jun-2015 10:14:48
Tue 23-Jun-2015 10:14:53  this is some output
Tue 23-Jun-2015 10:14:53  another line of output
Tue 23-Jun-2015 10:14:53  final line of output
Tue 23-Jun-2015 10:14:53

如您所见,时间戳正在打印。但是,对于每个PHP脚本执行的每行输出,它们都是相同的,而在每行输出之间应该有几秒的差异。

我相信这种情况正在发生,因为date命令在shell脚本中每行只评估一次,当我希望每次PHP脚本有新输出时都重新评估它。

这可能吗?

更新
我发现以下内容是我的最终解决方案:

#!/bin/bash

shopt -s expand_aliases
FMT='%a %d-%b-%Y %R:%S'
alias stamp="perl -p -MPOSIX -e 'BEGIN { $|=1 } {\$!=1} \$_ = strftime(\"$FMT  \", localtime).\$_'"

php ryan.php | stamp
sleep 1

php ryan.php | stamp
sleep 1

exit 0

0 个答案:

没有答案