Журналы префикса с датой в скрипте оболочки
Вопрос
У меня есть скрипт оболочки с большим количеством заявлений Echo. Я хочу префикс каждой строки вывода с временем/датой.
Итак, я заменил все
echo "Some text1"
echo "Some text2"
с
echo "`date +%y/%m/%d_%H:%M:%S`:: some text1"
echo "`date +%y/%m/%d_%H:%M:%S`:: some text2"
Это довольно уродливо. Есть ли в любом случае, чтобы создать псевдоним (или аналог #Define в C), чтобы сделать его чище.
Очевидно, делая что -то вроде:
DATE=`date +%y/%m/%d_%H:%M:%S`
echo "$DATE:: some text1"
echo "$DATE:: some text2"
... не сработает, потому что в этом случае дата рассчитывается только один раз, и каждое эхо будет иметь одинаковую дату.
Я думаю о замене каждого эха на вызов функции печати, который делает префикс. Я хочу знать, есть ли у кого -нибудь другие/лучшие идеи.
Решение
echodate()
{
echo `date +%y/%m/%d_%H:%M:%S`:: $*
}
echodate Some text 1
echodate Some text 2
Другие советы
Если вы используете Bash ...:
#!/bin/bash
function myecho() {
echo "`date +%y/%m/%d_%H:%M:%S`:: $@"
}
myecho "hola"
Да, функция оболочки или, наоборот, используйте псевдоним:
alias now="date +%s" # or your specific date format
echo "`now` some text"
#!/bin/bash
echo() {
printf "`date`: $1\n"
}
echo "test"
--
приведет к:
abi@cefix: ~ $ sh test.sh
FR 18. Mär 13:33:35 CET 2011: тест
Так что вам не нужно менять все свои заявления Echo.
Или просто храните формат:
format="+%y/%m/%d_%H:%M:%S::"
echo $(date $format) some text
Кстати, не так много цитат.
Если вы используете Kornshell (KSH), вот функция:
#** Description: Logs stringToLog to scriptLog using a standard date format.
#** Parameters: ${1} stringToLog (Required)
#** ${2} scriptLog (Required)
log() {
echo "[`date +'%Y/%m/%d %H:%M:%S%s'`]: ${1}" >> "${2}"
}
Пример вызова вышеуказанной функции:
log "Starting foo script." "${PWD}/logs/foo.log"