gpt4 book ai didi

linux - 如何将间隔添加到存储在变量中的日期/时间

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:06 24 4
gpt4 key购买 nike

我正在 Fedora 27 机器上编写 bash 脚本。此脚本每隔一段时间运行一个 Python 程序,偶尔显示进度消息。除了将时间间隔添加到存储在变量中 的那一行之外,它的工作正常。

有谁知道如何做到这一点?

这是脚本的最小版本。

#!/usr/bin/env bash

next_run_dat=${1}
echo -n 'Next run will be at: ';echo ${next_run_dat}

now_dat=`date +'%Y-%m-%d %H:%M:%S'`
echo -n 'The time is now: ';echo ${now_dat}

while [[ ${now_dat} < ${next_run_dat} ]]
do
sleep 10
now_dat=`date +'%Y-%m-%d %H:%M:%S'`
echo -n 'The time is now: ';echo ${now_dat}
done

while true
do
echo 'This line represents a run.'
sleep 5

# ==> PROBLEM LINE BELOW <==
next_run_dat=$(date -d "${next_run_dat} + 25 seconds" +'Y-%m-%d %H:%M:%S')
echo -n 'Next run will be at: ';echo ${next_run_dat}

now_dat=`date +'%Y-%m-%d %H:%M:%S'`
echo -n 'The time is now: ';echo ${now_dat}

while [[ ${now_dat} < ${next_run_dat} ]]
do
sleep 5
now_dat=`date +'%Y-%m-%d %H:%M:%S'`
echo -n 'The time is now: ';echo ${now_dat}
done
done

这是运行最小版本的输出:

$ bash control_bash_minimal.sh '2018-07-23 09:38:00'
Next run will be at: 2018-07-23 09:38:00
The time is now: 2018-07-23 09:37:36
The time is now: 2018-07-23 09:37:46
The time is now: 2018-07-23 09:37:56
The time is now: 2018-07-23 09:38:06
This line represents a run.
date: invalid date ‘2018-07-23 09:38:00 + 25 seconds’
Next run will be at:
The time is now: 2018-07-23 09:38:11
This line represents a run.
Next run will be at: Y-07-23 09:38:41
The time is now: 2018-07-23 09:38:16
^C

非常感谢您对此问题的任何帮助。

最佳答案

输入格式使用 + 有两个不同的目的:在时间戳中指定时区,以及指定时间戳的相对增加。在您的情况下,date 试图将 25 seconds 解析为时区。如果您指定一个明确的时区,那么您可以添加一个偏移量:

$ date -d "2018-07-23 09:38:00"
Mon Jul 23 09:38:00 EDT 2018

$ date -d "2018-07-23 09:38:00 + 25 seconds"
date: invalid date ‘2018-07-23 09:38:00 + 25 seconds’

# I used a minus sign here to make the output match
# the first example...
$ date -d "2018-07-23 09:38:00-0400 + 25 seconds"
Mon Jul 23 09:38:25 EDT 2018

# ... but positive timezone offsets work too
# (Note that date uses the timezone to parse the
# input, but converts the result to your local
# timezone.)
$ date -d "2018-07-23 09:38:00+0100 + 25 seconds"
Mon Jul 23 04:38:25 EDT 2018

可能有一种方法可以在不添加我不知道的明确时区的情况下消除歧义。

关于linux - 如何将间隔添加到存储在变量中的日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51480594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com