2012-02-06 4 views
0

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

На консоли

дата +% Y% м% D_% H% M% S_% N

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

Для того, чтобы сократить все те nano и mikro секунды, которые я нашел

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

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

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

Это scriptcode работы:

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

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

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

Это scriptcode не работает:

#!/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. 

Итак, что-то пойдет не так с трубой, чтобы СЭД во время выполнения.

Любые идеи?

ответ

3

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

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

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

... 

log_echo hello there 
+0

'$ *' не DWIM-совместимый; например, попробуйте строки с несколькими последовательными символами пробела. Вместо этого используйте '' $ @ "'. – l0b0

+0

Хорошая точка, обновленная – Mat

Смежные вопросы