В чистом /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"
Системный журнал будет автоматически хранить дату и время, а также имя хоста.