В чистом /bin/sh
, date
нереста является основным способом. Но это не так уж и плохо - и Linux, и BSD довольно быстро создают новые процессы, и двоичный файл date
будет некоторое время кэшироваться в памяти. Если вам не нравятся обратные пометки, $(this syntax)
обычно предпочтительнее их.
Вы можете изменить формат даты, используя date +fmt
, задав ему стиль strftime():
echo "nightly $MACHINE restart at $(date +"%F %T %z")"
echo "$(date +"%F %T %z"): $MACHINE: nightly restart"
...Фактически, вы можете расширить опцию формата даты, чтобы заставить date
печатать всю строку - до тех пор, пока вы избегаете или экранируете символы %
в переменных:
date +"%F %T %z: $MACHINE: nightly restart"
В оболочке Bash вы можете заменить echo
на printf
и использовать специальный спецификатор формата %(fmt)T
, который снова принимает формат strftime():
printf "%(%F %T %z)T: %s: nightly restart\n" "$MACHINE"
Во всех вышеприведенных примерах %F %T %z
(или полная версия %Y-%m-%d %H:%M:%S %z
) является форматом даты «модифицированный ISO 8601 ». (Обычный ISO 8601 был бы %FT%T%z
или %Y-%m-%dT%H:%M:%S%z
, немного менее читаемый.) Любой из них, как правило, является лучшим выбором при форматировании дат для будущего разбора.
Наконец, вы можете полностью забыть об echo
и записывать данные непосредственно в системный журнал. Большинство операционных систем поставляются с функцией logger
для отправки в системный журнал:
logger -s -p user.notice "nightly restart"
Системный журнал будет автоматически хранить дату и время, а также имя хоста.