سؤال

لدي برنامج نصي شل مع الكثير من بيانات الصدى. أريد أن بادئة كل سطر من الإخراج مع الوقت / التاريخ.

لذلك، استبدلت كل

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"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top