Создать переменную timestamp в скрипте bash
Я пытаюсь создать переменную timestamp в shell-скрипт, чтобы сделать ведение журнала немного легче. Я хочу создать переменную в начале скрипта и распечатать ее текущее время при каждом выпуске echo $timestamp
. Это оказалось труднее, чем я думал. Вот некоторые вещи, которые я пробовал:
timestamp="(date +"%T")"
Эхо выводит (date +"%T")
timestamp="$(date +"%T")"
echo выводит время инициализации переменной.
другие вещи, которые я пробовал, просто небольшие вариации, которые не работали лучше. Кто-нибудь знает, как выполнить то, что я пытаюсь сделать?
8 ответов
чтобы получить текущую метку времени, а не время, когда определена фиксированная переменная, трюк заключается в использовании функции и не переменной:
#!/bin/bash
# Define a timestamp function
timestamp() {
date +"%T"
}
# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...
Если вам не нравится формат, данное %T
спецификатор вы можете объединить другие спецификаторы преобразования времени, принятые date
. Для GNU date
, вы можете найти полный список этих спецификаторов в официальной документации здесь: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers
Если вы хотите получить метку времени unix, вам нужно использовать:
timestamp=$(date +%s)
%T
даст вам только время; то же самое, что %H:%M:%S
(via http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)
можно использовать
timestamp=`date --rfc-3339=seconds`
это доставляет в формате 2014-02-01 15:12:35-05:00
спина-тики (`
) символы приведут к тому, что между ними будет оцениваться и результат будет включен в строку. date --help
есть и другие варианты.
формат ISO 8601 (2018-12-23T12:34:56
) более читаем, чем временная метка UNIX. Однако на некоторых OSs вы не можете иметь :
в именах файлов. Поэтому я рекомендую использовать что-то вроде этого:
2018-12-23_12-34-56
вы можете использовать следующую команду, чтобы получить метку времени в следующем формате:
date +%Y-%m-%d_%H-%M-%S
это формат, который я видел во многих приложениях. Другая хорошая вещь об этом является то, что если имена файлов начинаются с этого, вы можете сортировать их по алфавиту, и они будут сортировка по дате.
Я использую ubuntu 14.04.
правильный путь в моей системе, должны быть date +%s
.
выход date +%T
как 12:25:25
.
timestamp=$(awk 'BEGIN {srand(); print srand()}')
srand без значения использует текущую метку времени с большинством реализаций Awk.