بعض خيارات 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