bash ما يعادل `__FILE__`،`__LINE__` في باش



macros equivalent (4)

المتغير $ 0 سوف تعطيك اسم البرنامج النصي شل تنفيذ في باش.

https://src-bin.com

هل هناك أي متغير في باش يحتوي على اسم الملف .sh الذي تم تنفيذه؟
رقم الخط سيكون كبيرا جدا.

أريد استخدامه في رسائل خطأ مثل:
إيكو "إرور: [$ فيل: L $ لين] $ سوميفيل نوت فوند"


Answer #1

تحتاج فقط إلى

echo $LINENO
echo $(basename $0)

Answer #2
#!/bin/bash

echo $LINENO
echo `basename $0`

$LINENO السطر الحالي $0 للملف الحالي. لقد استخدمت basename لضمان أن تحصل فقط على اسم الملف وليس المسار.

تحديث:

#!/bin/bash

MY_NAME=`basename $0`

function ouch {
   echo "Fail @ [${MY_NAME}:${1}]"
   exit 1
}

ouch $LINENO

لديك لتمرير الخط كمعلمة إذا كنت تستخدم نهج وظيفة آخر سوف تحصل على خط تعريف وظيفة.


Answer #3

أجد "BASH_SOURCE" و "BASH_LINENO" المدمج في صفائف مفيدة جدا:

$ cat xx
#!/bin/bash

_ERR_HDR_FMT="%.23s %s[%s]: "
_ERR_MSG_FMT="${_ERR_HDR_FMT}%s\n"

error_msg() {
  printf "$_ERR_MSG_FMT" $(date +%F.%T.%N) ${BASH_SOURCE[1]##*/} ${BASH_LINENO[0]} "${@}"
}

error_msg "here"


error_msg "and here"

استدعاء العائد شكس

2010-06-16.15:33:13.069 xx[11]: here
2010-06-16.15:33:13.073 xx[14]: and here




equivalent