سجلات البادئة مع التاريخ في SHELL SCRIPT
سؤال
لدي برنامج نصي شل مع الكثير من بيانات الصدى. أريد أن بادئة كل سطر من الإخراج مع الوقت / التاريخ.
لذلك، استبدلت كل
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 في ج)، لجعلها نظافة.
من الواضح أن تفعل شيئا مثل:
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
نصائح أخرى
إذا كنت تستخدم باش ...:
#!/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: اختبار
لذلك لا تضطر إلى تغيير كل بيانات الصدى الخاصة بك.
أو مجرد تخزين التنسيق:
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"