我试图在shell脚本中创建一个时间戳变量,以使日志记录更容易一些。我想在脚本的开头创建变量,并让它在发出echo $timestamp时打印出当前时间。事实证明这比我想象的要困难得多。以下是我尝试过的一些方法:
timestamp="(date +"%T")"回显输出(date +"%T")
timestamp="$(date +"%T")"回显变量初始化的时间。
我尝试过的其他方法都只是细微的变化,效果并不好。有人知道我要怎么做吗?
我试图在shell脚本中创建一个时间戳变量,以使日志记录更容易一些。我想在脚本的开头创建变量,并让它在发出echo $timestamp时打印出当前时间。事实证明这比我想象的要困难得多。以下是我尝试过的一些方法:
timestamp="(date +"%T")"回显输出(date +"%T")
timestamp="$(date +"%T")"回显变量初始化的时间。
我尝试过的其他方法都只是细微的变化,效果并不好。有人知道我要怎么做吗?
当前回答
您可以参考下表生成各种格式的时间戳:
Format / result | Command | Output |
---|---|---|
YYYY-MM-DD | date -I |
$(date -I) |
YYYY-MM-DD_hh:mm:ss | date +%F_%T |
$(date +%F_%T) |
YYYYMMDD_hhmmss | date +%Y%m%d_%H%M%S |
$(date +%Y%m%d_%H%M%S) |
YYYYMMDD_hhmmss (UTC version) | date --utc +%Y%m%d_%H%M%SZ |
$(date --utc +%Y%m%d_%H%M%SZ) |
YYYYMMDD_hhmmss (with local TZ) | date +%Y%m%d_%H%M%S%Z |
$(date +%Y%m%d_%H%M%S%Z) |
YYYYMMSShhmmss | date +%Y%m%d%H%M%S |
$(date +%Y%m%d%H%M%S) |
YYYYMMSShhmmssnnnnnnnnn | date +%Y%m%d%H%M%S%N |
$(date +%Y%m%d%H%M%S%N) |
YYMMDD_hhmmss | date +%y%m%d_%H%M%S |
$(date +%y%m%d_%H%M%S) |
Seconds since UNIX epoch | date +%s |
$(date +%s) |
Nanoseconds only | date +%N |
$(date +%N) |
Nanoseconds since UNIX epoch | date +%s%N |
$(date +%s%N) |
ISO8601 UTC timestamp | date --utc +%FT%TZ |
$(date --utc +%FT%TZ) |
ISO8601 UTC timestamp + ms | date --utc +%FT%T.%3NZ |
$(date --utc +%FT%T.%3NZ) |
ISO8601 Local TZ timestamp | date +%FT%T%Z |
$(date +%FT%T%Z) |
YYYY-MM-DD (Short day) | date +%F\(%a\) |
$(date +%F\(%a\)) |
YYYY-MM-DD (Long day) | date +%F\(%A\) |
$(date +%F\(%A\)) |
其他回答
您可以参考下表生成各种格式的时间戳:
Format / result | Command | Output |
---|---|---|
YYYY-MM-DD | date -I |
$(date -I) |
YYYY-MM-DD_hh:mm:ss | date +%F_%T |
$(date +%F_%T) |
YYYYMMDD_hhmmss | date +%Y%m%d_%H%M%S |
$(date +%Y%m%d_%H%M%S) |
YYYYMMDD_hhmmss (UTC version) | date --utc +%Y%m%d_%H%M%SZ |
$(date --utc +%Y%m%d_%H%M%SZ) |
YYYYMMDD_hhmmss (with local TZ) | date +%Y%m%d_%H%M%S%Z |
$(date +%Y%m%d_%H%M%S%Z) |
YYYYMMSShhmmss | date +%Y%m%d%H%M%S |
$(date +%Y%m%d%H%M%S) |
YYYYMMSShhmmssnnnnnnnnn | date +%Y%m%d%H%M%S%N |
$(date +%Y%m%d%H%M%S%N) |
YYMMDD_hhmmss | date +%y%m%d_%H%M%S |
$(date +%y%m%d_%H%M%S) |
Seconds since UNIX epoch | date +%s |
$(date +%s) |
Nanoseconds only | date +%N |
$(date +%N) |
Nanoseconds since UNIX epoch | date +%s%N |
$(date +%s%N) |
ISO8601 UTC timestamp | date --utc +%FT%TZ |
$(date --utc +%FT%TZ) |
ISO8601 UTC timestamp + ms | date --utc +%FT%T.%3NZ |
$(date --utc +%FT%T.%3NZ) |
ISO8601 Local TZ timestamp | date +%FT%T%Z |
$(date +%FT%T%Z) |
YYYY-MM-DD (Short day) | date +%F\(%a\) |
$(date +%F\(%a\)) |
YYYY-MM-DD (Long day) | date +%F\(%A\) |
$(date +%F\(%A\)) |
这比您要求的要多一点,因此您可以根据需要定制它。
我试图在一个shell脚本中创建一个时间戳变量…
这个脚本将允许您创建一个变量。尽管我不完全确定在更改shell上下文时可重用性如何。但它会起作用。
function timestamp {
TEXT="Date:"
DATE=`date +%Y-%m-%d`
TIME=`date +%H:%M:%S`
ZONE=`date +"%Z %z"`
echo $TEXT $DATE $TIME $ZONE
}
function fulldate {
timevariable=$(timestamp)
echo $timevariable
}
echo "- Output 1:"
timestamp
echo "- Output 2:"
fulldate
echo "- Output 3:"
echo $timevariable
输出:
- Output 1:
Date: 2021-08-12 23:28:08 UTC +0000
- Output 2:
Date: 2021-08-12 23:28:08 UTC +0000
- Output 3:
Date: 2021-08-12 23:28:08 UTC +0000
我已经在GNU bash版本4.4.23(1)-release (x86_64-pc-msys)上进行了测试
你可以使用
timestamp=`date --rfc-3339=seconds`
发布格式为2014-02-01 15:12:35-05:00
反勾号(')字符将导致它们之间的内容被计算,并将结果包含在该行中。约会——帮助有其他选择。
GNU bash的时间戳格式化技巧,版本4.4.20(1)-release (x86_64-pc-linux-gnu)
echo "$(date +%Y-%m-%d_%H:%M:%S.%6N) Info >>> enter main"
输出:
2023-01-08_23:08:48.013592 Info >>> enter main
如果你想用空格替换'_',请执行以下操作(w/o '\'得到错误消息)
echo "$(date +%Y-%m-%d\ %H:%M:%S.%6N) Info >>> enter main"
echo "$(date +%Y-%m-%d\ %T.%6N) Info >>> enter main"
输出:
2023-01-08 23:10:40.692674 Info >>> enter main
下面将给出当地的日期和时间-但它确实需要互联网访问。根据所记录的内容,这可能是有益的—监视和记录连接状态?
curl -i --silent https://google.com/ 2>&1 | grep date
date: Fri, 03 Jun 2022 17:39:19 GMT