我试图在shell脚本中创建一个时间戳变量,以使日志记录更容易一些。我想在脚本的开头创建变量,并让它在发出echo $timestamp时打印出当前时间。事实证明这比我想象的要困难得多。以下是我尝试过的一些方法:
timestamp="(date +"%T")"回显输出(date +"%T")
timestamp="$(date +"%T")"回显变量初始化的时间。
我尝试过的其他方法都只是细微的变化,效果并不好。有人知道我要怎么做吗?
我试图在shell脚本中创建一个时间戳变量,以使日志记录更容易一些。我想在脚本的开头创建变量,并让它在发出echo $timestamp时打印出当前时间。事实证明这比我想象的要困难得多。以下是我尝试过的一些方法:
timestamp="(date +"%T")"回显输出(date +"%T")
timestamp="$(date +"%T")"回显变量初始化的时间。
我尝试过的其他方法都只是细微的变化,效果并不好。有人知道我要怎么做吗?
当前回答
下面将给出当地的日期和时间-但它确实需要互联网访问。根据所记录的内容,这可能是有益的—监视和记录连接状态?
curl -i --silent https://google.com/ 2>&1 | grep date
date: Fri, 03 Jun 2022 17:39:19 GMT
其他回答
如果性能是一个问题,@chepner的答案是一个明显的赢家。
稍微复杂一点的是,您还可以只使用bash内置程序获得微秒或毫秒级的粒度。下面是一个函数的例子,它发出包含毫秒的当前时间戳:
timestamp() {
IFS=. read S US <<<$EPOCHREALTIME # Read epoch seconds/microseconds
MS=$((10#$US/1000)) # Convert to milliseconds (interpret in base-10, even with leading 0)
printf '%(%F %T)T.%03i' $S $MS # Emit formatted timestamp
}
TS=$(timestamp) # Invoke function, assign to variable
请注意,printf格式可以调整为您首选的日期/时间格式。
ISO 8601格式(2018-12-23T12:34:56)比UNIX时间戳更具可读性。然而,在某些操作系统上,你不能在文件名中有:。因此,我建议使用这样的方法:
2018-12-23_12-34-56
您可以使用以下命令来获取该格式的时间戳:
TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`
这是我看到许多应用程序使用的格式。另一个好处是,如果你的文件名以这个开头,你可以按字母顺序排序它们会按日期排序。
如果你想获取unix时间戳,那么你需要使用:
timestamp=$(date +%s)
T会给你刚好的时间;与%H:%M:%S相同(通过http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)
对于我的欧洲同胞,试试这个:
timestamp=$(date +%d-%m-%Y_%H-%M-%S)
将给出格式格式:“15-02-2020_19-21-58”
你调用这个变量并得到像这样的字符串表示
$timestamp
这比您要求的要多一点,因此您可以根据需要定制它。
我试图在一个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)上进行了测试