bash 4.3旧设备执行date +%s无法获取秒级时间戳如何解决
问题原因
你遇到的问题和bash 4.3版本本身无关,是当前设备内置的date命令实现不支持%s格式符导致的:%s(输出自1970-01-01 00:00:00 UTC到当前时间的秒数)是GNU date的扩展功能,不属于早期POSIX标准的强制要求,嵌入式旧设备、老旧BSD系统、裁剪版BusyBox环境里的精简date工具大多没有实现这个特性,遇到不识别的格式符就会直接输出占位符本身,也就是你看到的%s。
可用解决方法
- 方法1:使用bash内置printf(适配你的bash 4.3版本,无需调用外部工具)
bash 4.2及以上版本内置的printf支持%(格式)T时间输出语法,直接执行以下命令即可拿到秒级时间戳:
其中参数printf '%(%s)T\n' -1-1指定读取当前系统时间。 - 方法2:用Python实现(设备预装Python的场景)
即使是Python2.6/2.7的旧版本也可以直接执行:python -c 'import time; print(int(time.time()))' - 方法3:用Perl实现(设备预装Perl的场景)
执行命令:perl -e 'print time' - 方法4:BusyBox环境可重新编译开启支持
如果你的设备是BusyBox裁剪系统,可以在编译配置中开启FEATURE_DATE_FORMAT选项,重新编译刷入后即可正常使用date +%s命令。
内容的提问来源于stack exchange,提问作者Howhit
相关产品推荐
相关产品推荐

