создание метки времени эха / нельзя использовать канал в строке эха - PullRequest
0 голосов
/ 06 февраля 2012

Я хотел бы использовать метки времени для регистрации выходных данных в файле сценария.

На консоли

дата +% Y% m% d_% H% M%S_% N

печатает что-то вроде "20120206_104531_944652200"

Чтобы сократить все те нано и микро секунды, которые я нашел

дата +% Y% m% d_% H% M% S_% N |sed s, ". \ {6 \} $" ,,

, что дает мне что-то вроде "20120206_104531_944"

В файле сценария это, кажется,несколько другой.Временная метка должна оцениваться каждый раз, когда выводится протоколирование.

Этот скрипт работает:

#!/usr/bin/bash
log_prefix1="date +%Y%m%d_%H%M%S_%N"

echo "`${log_prefix1}` blabla"
sleep 3
echo "`${log_prefix1}` blabla"

К сожалению, я не нашел способа запустить это столько 3 наиболее значимые цифры наносекунд.

Этот код сценария не работает:

#!/usr/bin/bash
log_prefix="date +%Y%m%d_%H%M%S_%N | sed s,\".\{6\}$\",,"

echo "`${log_prefix}` blabla"
sleep 3
echo "`${log_prefix}` blabla"

Я получаю следующее сообщение об ошибке:

date: extra operand `|'
Try `date --help' for more information.

Итак, что-точто-то не так с конвейером sed во время выполнения.

Есть идеи?

1 Ответ

3 голосов
/ 06 февраля 2012

Вы можете сделать свою жизнь немного проще, создав для этого функцию.

Что-то вроде:

log_echo() { 
  echo $(date +%Y%m%d_%H%M%S_%N | sed 's,.\{6\}$,,') "$@";
}

...

log_echo hello there
...