在命令输出在版本和操作系统上是不统一的。 还有其他的方式吗?

我写了一个小的PHP脚本来包装Ubuntu上的at命令。 现在我需要获得在Redhat服务器上运行的相同代码。 当然,添加和列出工作时的输出当然是不同的。

Ubuntu( at -V = 3.1.11): job 4 at Fri Nov 12 13:41:00 2010

Redhat( at -V = 3.1.8): job 14 at 2010-11-12 13:42

有什么办法可以修改at命令的输出使其更加统一? 我已经看过man at ,我什么都看不到,但也许我已经错过了一些偷偷摸摸的捷径。

我正在使用正则expression式来“读取”输出,所以我可以更新,以支持Redhat格式,但是如果在不同的发行版上运行它,会发生什么情况。

我可以看到这些string在date/时间格式上有所不同。 您可以将输出分成两个子string(作业4 at)和date/时间部分。 然后,您可以使用函数strtotimeparsingdate。

最后,您可以将第一部分与parsing的date/时间结合起来。 所以,你得到一个统一的输出。 此外,您可以将date/时间部分转换为所需的格式。

你可以使用如下的东西来标准化date:

 date -d "$date" --rfc-3339=seconds 

我会build议以下,但似乎忽略语言环境variables:

 LC_TIME=C at -v ... # has no effect 

我发现使用at -v标志在Ubuntu和Redhat上使用相同的date输出格式。 但是输出如下所示:

Ubuntu的

 Fri Nov 12 13:41:00 2010 warning: commands will be executed using /bin/sh job 4 at Fri Nov 12 13:41:00 2010 

红帽

 Fri Nov 12 13:42:00 2010 job 14 at 2010-11-12 13:42 

这将允许我从第一行获得date,然后从最后一行获取工作编号。

当添加作业时,这是很好的,但是在队列中列出作业时, -v将不起作用,并且date格式也会有所不同。 认为可能是一个不同的队列软件的时候了。