Linux日期有时不显示日期值

时间:2018-03-09 01:02:35

标签: linux date datetime unix-timestamp

我在其中一个shell脚本中定义了一个变量来创建包含日期值的文件名。

我使用"日期+%Y%m%d"用于插入date_val变量中定义的当前日期的命令。

我已经将filename变量定义为" $ {path} / sample _ $ {date_val} .txt

几天后,它正确地创建了文件名 /programfiles/sample_20180308.txt

但是今天创建的文件名没有日期 /programfiles/sample_.txt

当我尝试执行命令"日期+%Y%m%d"在linux中,它返回正确的值 - 20180309。

知道为什么没有日期值创建文件名??? 。我也没有在我的脚本中修改任何内容。所以想知道可能出了什么问题。

下面给出了我的脚本的示例摘录,以便于理解:

EDITED

path=/programfiles
date_val=$(date +%Y%m%d )
file_name=${path}/sample_${date_val}.txt

1 个答案:

答案 0 :(得分:1)

虽然极不可能,但基于源代码,date失败肯定可能。在幕后,它会调用clock_gettime()gettimeofday(),两者都可能失败。

如果来自这两个函数中的任何一个的日期在调用期间超出范围,date程序也将拒绝输出任何标准输出(如果 它们失败,则可能 )。

date程序可能会消失"由于各种原因,例如实际隐藏或权限已更改,或尝试打开可执行文件时文件句柄等资源不足。

如上所述,所有这些可能性都是一个延伸,不太可能在现实世界中发生。

如果你想处理date输出不足的情况,你可以尝试直到你得到一个有效的输出,例如(有可能增加一些限制来检测它是否有&#39}。 s 从不任何好处:

todaysDate="$(date +%Y%m%d)"
while [[ ! $x =~ ^[0-9]{8}$ ]] ; do
    sleep 1
    todaysDate="$(date +%Y%m%d)"
done
# todaysDate now guaranteed to be eight digits.