ثمانية خيارات Bash غير معروفة

بعض خيارات Bash معروفة جيدًا وغالبًا ما يتم استخدامها. على سبيل المثال، كثير من الناس يكتبون في بداية البرنامج النصي

مجموعة -o xtrace

لتصحيح الأخطاء،

مجموعة -o errexit

للخروج عن طريق الخطأ أو

تعيين -o errunset

للخروج إذا لم يتم تعيين المتغير المطلوب.

ولكن هناك العديد من الخيارات الأخرى. في بعض الأحيان يتم وصفها بشكل مربك للغاية في مانا، لذلك قمت بجمع بعض من أكثرها فائدة هنا، مع الشرح.

ملاحظة: قد تحتوي أجهزة Mac على إصدار أقدم من bash (3.x بدلاً من 4.x) حيث لا تتوفر كل هذه الخيارات. في هذه الحالة، انظر هنا أو هنا.

set أو shopt?

هناك طريقتان لتعيين خيارات bash: من البرنامج النصي أو من سطر الأوامر. يمكنك استخدام الأوامر المضمنة set и shopt. كلاهما يغير سلوك الصدفة، ويفعلان نفس الشيء تقريبًا (مع حجج مختلفة)، لكنهما يختلفان فيهما أصل. خيارات set يتم توريثها أو استعارتها من معلمات الأصداف الأخرى، بينما المعلمات shopt تم إنشاؤه في باش.

إذا كنت تريد رؤية الخيارات الحالية، قم بتشغيل:

$ set -o
$ shopt

لتفعيل الخيار في set يتم استخدام بناء الجملة الطويل أو القصير:

$ set -o errunset
$ set -e

وأثر هو نفسه.

لتعطيل الخيار، تحتاج إلى وضع علامة زائد بدلا من ناقص:

$ set +e

لفترة طويلة لم أتمكن من تذكر بناء الجملة هذا لأن المنطق بدا خاطئًا (علامة الطرح تمكن هذا الخيار، وعلامة الجمع تعطله).

В shopt يتم استخدام العلامات (الأكثر منطقية) لتمكين الخيارات وتعطيلها -s (مجموعة) و -u (غير محدد):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

تغيير الدلائل

هناك العديد من الخيارات التي تساعدك على العمل مع الدلائل.

1.cdspell

باستخدام هذا الإعداد، سيبدأ bash في فهم الأخطاء المطبعية وسينقلك إلى المجلد الذي أخطأت في كتابة اسمه.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

لقد كنت أستخدم هذا الخيار لسنوات عديدة ونادرًا ما يتخذ قرارًا غريبًا (ربما مرة واحدة في السنة). ولكن في أيام أخرى cdspell يوفر الوقت، حرفيًا كل يوم.

2. أوتوكاد

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

$ shopt -s autocd
$ abcdefg
$ cd ..

يتيح لك هذا، مع الإكمال التلقائي، التنقل بسرعة بين المجلدات:

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

فقط لا تسمي المجلد rm -rf * (نعم، بالمناسبة، هذا ممكن).

3.direxpand

يعد هذا خيارًا رائعًا يعمل على توسيع متغيرات البيئة بالضغط على Tab:

$ shopt -s direxpand
$ ./[TAB]     # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  заменяется на...
$ /full/path/to/home/folder

إخراج نظيف

4. فحص الوظائف

يوقف هذا الخيار تسجيل الخروج من الجلسة إذا كانت لا تزال هناك مهام قيد التشغيل في الخلفية.

بدلاً من الخروج، يتم عرض قائمة بالمهام غير المكتملة. إذا كنت لا تزال ترغب في الخروج، فأدخل مرة أخرى exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID процесса для оболочки
$ sleep 999 &
$ exit
There are running jobs.
[1]+  Running                 sleep 999 &
$ echo $$
68125             # <= ID процесса для оболочки тот же
$ exit
There are running jobs.
[1]+  Running                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= на этот раз ID процесса  изменился

استبدال القوى العظمى

5.globstar

يمنحك هذا الخيار قوى خارقة بديلة! إذا قمت بإدخال:

$ shopt -s globstar
$ ls **

بعد ذلك ستعرض الصدفة جميع الدلائل والأدلة الفرعية بشكل متكرر.

بالاشتراك مع direxpand يمكنك عرض كل شيء أقل في التسلسل الهرمي بسرعة:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

يمكّن هذا الخيار الميزات المرتبطة بشكل أكثر شيوعًا بالتعبيرات العادية. في بعض الأحيان يكون هذا مفيدًا جدًا:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

هنا يتم وضع الأنماط بين قوسين ويفصل بينها شريط عمودي. فيما يلي عوامل التشغيل المتاحة:

؟ = يطابق صفرًا أو تكرارًا واحدًا للأنماط المحددة! = إظهار كل ما لا يتطابق مع الأنماط المحددة * = صفر أو أكثر من التكرارات + = حدث واحد أو أكثر @ = حدث واحد بالضبط

الحماية من الحوادث

7. التحقق من صحة البيانات

قد يكون استخدام أوامر التشغيل السريع من تاريخ الاختصارات أمرًا مخيفًا بعض الشيء في البداية !! и !$.

خيار histverify يتيح لك أولاً معرفة كيف يفسر Bash الأمر قبل تشغيله فعليًا:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. نوكلوبير

مرة أخرى، للحماية من الحوادث، أي من الكتابة فوق ملف موجود بالفعل لدى عامل إعادة التوجيه (>). يمكن أن يكون هذا كارثة إذا لم يكن لديك نسخة احتياطية.

خيار set -С يحظر مثل هذه الكتابة الفوقية. إذا لزم الأمر، يمكنك تجاوز الحماية باستخدام المشغل >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

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

إضافة تعليق