سبعة متغيرات 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 قمت بتشغيل هذا في: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 قمت بتشغيل هذا في: 01/05/19 13:38:19 حليقة bbc.co.uk 1873 قمت بتشغيل هذا في: 01/05/19 13:38:41 : 1874/01/05 19:13:39 sudo vi /etc/resolv.conf 18 قمت بتشغيل هذا في: 1876/01/05 19:13:39 cur -vvv bbc.co.uk 25 قمت بتشغيل هذا في: XNUMX /XNUMX/XNUMX XNUMX:XNUMX:XNUMX سودو سو -

التنسيق يطابق الأحرف من man date.

3) CDPATH

لتوفير الوقت في سطر الأوامر، يمكنك استخدام هذا المتغير لتغيير الدلائل بنفس سهولة إصدار الأوامر.

مثل PATH، عامل CDPATH هي قائمة مسارات مفصولة بنقطتين. عند تشغيل الأمر cd باستخدام مسار نسبي (أي بدون شرطة مائلة بادئة)، افتراضيًا، تبحث الصدفة في مجلدك المحلي عن الأسماء المطابقة. 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 shell الحالي الخاص بك إلى shell "أصلي" آخر، أم أنه سيغلق نافذة وحدة التحكم بالكامل؟

يتتبع هذا المتغير مدى عمق تداخلك في bash shell. إذا قمت بإنشاء محطة جديدة، فسيتم تعيينها على 1:

$ echo $SHLVL
1

وبعد ذلك، إذا بدأت عملية Shell أخرى، فسيزداد العدد:

$ bash
$ echo $SHLVL
2

يمكن أن يكون هذا مفيدًا جدًا في البرامج النصية التي لا تكون متأكدًا من الخروج منها أم لا، أو تتبع مكان تداخلك.

5) LINENO

يعد المتغير مفيدًا أيضًا لتحليل الحالة الحالية وتصحيح الأخطاء LINENO، والذي يوضح عدد الأوامر التي تم تنفيذها في الجلسة حتى الآن:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

يتم استخدام هذا غالبًا عند تصحيح البرامج النصية. إدخال خطوط مثل echo DEBUG:$LINENO، يمكنك تحديد مكان وجودك (أو لا) في البرنامج النصي بسرعة.

6) REPLY

إذا كنت، مثلي، تكتب عادةً رمزًا مثل هذا:

$ read input
echo do something with $input

قد يكون من المفاجئ أنك لا تحتاج إلى القلق بشأن إنشاء المتغير على الإطلاق:

$ read
echo do something with $REPLY

هذا يفعل نفس الشيء.

7) TMOUT

لتجنب البقاء على خوادم الإنتاج لفترة طويلة جدًا لأسباب أمنية أو تشغيل شيء خطير عن طريق الخطأ في الوحدة الطرفية الخاطئة، فإن تعيين هذا المتغير يعمل كحماية.

إذا لم يتم إدخال أي شيء لعدد محدد من الثواني، فسيتم خروج الصدفة.

أي أن هذا بديل sleep 1 && exit:

$ TMOUT=1

المصدر: www.habr.com

إضافة تعليق