متابعة مع سلسلة من الملاحظات حول
وظائف bash
الأقل شهرة ، سأريك سبعة متغيرات قد لا تعرف عنها.
1) PROMPT_COMMAND
قد تكون بالفعل على دراية بكيفية التعامل مع مطالبة المطالبة لعرض مختلف المعلومات المفيدة ، ولكن لا يعلم الجميع أنه يمكنك تشغيل أمر shell في كل مرة تقوم بعرض المطالبة.
في الواقع ، تستخدم العديد من معالجات موجه معقدة هذا المتغير لتنفيذ أوامر لجمع المعلومات التي يتم عرضها في الموجه.
حاول تشغيل هذا في غلاف جديد وسترى ما يحدث مع الجلسة:
$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'
2) HISTTIMEFORMAT
إذا قمت بتشغيل
history
في وحدة التحكم ، فستحصل على قائمة بالأوامر التي تم تنفيذها مسبقًا تحت حسابك.
$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '
بمجرد تعيين هذا المتغير ، تسجل السجلات الجديدة وقتًا مع الأمر ، وبالتالي سيبدو الإخراج كما يلي:
1871 I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 I ran this at: 01/05/19 13:38:19 curl bbc.co.uk 1873 I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 I ran this at: 01/05/19 13:39:25 sudo su -
التنسيق يطابق الشخصيات من تاريخ الرجل.
3) CDPATH
لتوفير الوقت في سطر الأوامر ، يمكنك استخدام هذا المتغير لتغيير الدلائل بالسهولة التي تستدعي فيها الأوامر.
مثل
PATH
، متغير
CDPATH
عبارة عن قائمة مسارات مفصولة بنقطتين. عندما تقوم بتشغيل
cd
بمسار نسبي (أي بدون شرطة مائلة في البداية) ، يبحث shell افتراضيًا عن الأسماء المقابلة في المجلد المحلي.
CDPATH
في المسارات التي قدمتها للدليل الذي تريد الذهاب إليه.
إذا قمت بتثبيت
CDPATH
بهذه الطريقة:
$ CDPATH=/:/lib
ثم أدخل:
$ cd /home $ cd tmp
ثم سوف تكون دائما في
/tmp
بغض النظر عن مكان وجودك.
ومع ذلك ، كن حذرًا ، لأنه إذا لم تحدد مجلدًا محليًا (
.
) في القائمة ، فلن تتمكن من إنشاء أي مجلد
tmp
آخر والانتقال إليه ، كالعادة:
$ cd /home $ mkdir tmp $ cd tmp $ pwd /tmp
عفوا!
هذا مشابه للارتباك الذي شعرت به عندما أدركت أن المجلد المحلي لم يتم تضمينه في متغير
PATH
الأكثر دراية ... ولكن عليك القيام بذلك في متغير PATH لأنه يمكن خداعك عن طريق تشغيل أمر مزيف من بعض التعليمات البرمجية التي تم تنزيلها.
تم تعيين بلدي من قبل نقطة البداية:
CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt
4) SHLVL
هل تساءلت يومًا ما إذا كان إدخال
exit
سيأخذك من غلاف bash الحالي إلى قذيفة "أصل" أخرى أو مجرد إغلاق نافذة وحدة التحكم تمامًا؟
يتتبع هذا المتغير مدى عمق تواجدك في غلاف bash. إذا قمت بإنشاء محطة طرفية جديدة ، فسيتم ضبطها على 1:
$ echo $SHLVL 1
ثم ، إذا بدأت عملية shell أخرى ، فسيزيد العدد:
$ bash $ echo $SHLVL 2
قد يكون ذلك مفيدًا جدًا في البرامج النصية حيث لا تكون متأكدًا من الخروج أم لا ، أو لتتبع مكان تواجدك من خلال التداخل.
5) LINENO
أيضًا ، لتحليل الحالة الحالية وتصحيح الأخطاء ،
LINENO
متغير
LINENO
، حيث يبلغ عدد الأوامر المنفذة في الجلسة حتى الآن:
$ bash $ echo $LINENO 1 $ echo $LINENO 2
يستخدم هذا غالبًا عند تصحيح البرامج النصية. عن طريق إدراج خطوط مثل
echo DEBUG:$LINENO
، يمكنك تحديد
echo DEBUG:$LINENO
في البرنامج النصي (أو لا) بسرعة.
6) REPLY
إذا ، مثلي ، عادةً ما تكتب رمزًا مثل هذا:
$ read input echo do something with $input
قد تكون مفاجأة أنك لست مضطرًا للقلق بشأن إنشاء متغير على الإطلاق:
$ read echo do something with $REPLY
يفعل نفس الشيء.
7) TMOUT
من أجل عدم البقاء على خوادم الإنتاج لفترة طويلة لأسباب أمنية أو تشغيل شيء خطير بطريق الخطأ في الجهاز الخاطئ ، فإن تعيين هذا المتغير يعمل كحماية.
إذا لم يتم إدخال أي شيء خلال عدد الثواني المحدد ، فستخرج shell.
وهذا هو ، بديل عن
sleep 1 && exit
:
$ TMOUT=1