Linux Date 有时不显示日期值

标签 linux date datetime unix-timestamp

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

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

我已经将文件名变量定义为“${path}/sample_${date_val}.txt

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

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

当我尝试在 Linux 中执行命令“date +%Y%m%d”时,它返回了正确的值 - 20180309。

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

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

已编辑

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

最佳答案

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

如果这两个函数中的任何一个的日期在调用期间超出范围,date 程序也将拒绝向标准输出输出任何内容(这是可能的if 他们失败了)。

date 程序也可能由于各种原因“消失”,例如实际上被隐藏或权限更改,或者在尝试打开可执行文件时缺少文件句柄等资源。

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

如果你想处理你从 date 得到的输出不足的情况,你可以简单地尝试直到你得到一个有效的,比如(可以添加一些限制来检测它是否是从来没有任何好处):

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.

关于Linux Date 有时不显示日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185036/

相关文章:

linux - 设置挂起超时跨窗口管理器

asp.net - 指定日期输入格式

MySQL 表值与当前日期和上一个日期的差异

c# - 如何在 C# 中将字符串转换为 DateTime?

sql - PostgreSQL 中的 date_trunc 5 分钟间隔

php - opendkim 命令不适用于 PHP

捕获从 C 中的另一个文件调用的函数的标准输出

linux - 如何使用带引号的字段(可能包含分隔符)对 CSV 进行排序

date - Doctrine2 - 如何在此查询中包含月份的最后一天

python - 将 Python 中的 unix 时间戳转换为日期时间并落后 2 小时