هشت گزینه کمی شناخته شده Bash

برخی از گزینه های Bash به خوبی شناخته شده و اغلب استفاده می شوند. مثلا خیلی ها در ابتدای فیلمنامه می نویسند

مجموعه -o xtrace

برای رفع اشکال،

تنظیم -o errexit

برای خروج اشتباهی یا

set -o errunset

برای خروج اگر متغیر فراخوانی شده تنظیم نشده باشد.

اما بسیاری از گزینه های دیگر وجود دارد. گاهی اوقات آنها در ماناس بسیار گیج کننده توصیف می شوند، بنابراین من برخی از مفیدترین آنها را با توضیح در اینجا جمع آوری کرده ام.

توجه: مک‌های مک ممکن است نسخه قدیمی‌تری از bash (3.x به جای 4.x) داشته باشند که همه این گزینه‌ها در دسترس نباشد. در این مورد، ببینید اینجا یا اینجا.

set یا shopt?

دو راه برای تنظیم گزینه های bash وجود دارد: از یک اسکریپت یا از خط فرمان. می توانید از دستورات داخلی استفاده کنید set и shopt. هر دو رفتار پوسته را تغییر می دهند، تقریباً همان کار را انجام می دهند (با استدلال های مختلف)، اما در آنها متفاوت است اصل و نسب... گزینه ها set از پارامترهای پوسته های دیگر به ارث برده یا به عاریت گرفته شده اند، در حالی که پارامترها shopt در bash ایجاد شده است.

اگر می خواهید گزینه های فعلی را ببینید، اجرا کنید:

$ 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. autocd

اگر مایل به پذیرش ناکارآمدی چندین ورودی نیستید cd، سپس می توانید این گزینه را تنظیم کنید تا در صورت عدم وجود دستور X به پوشه X منتقل شود.

$ shopt -s autocd
$ abcdefg
$ cd ..

در ترکیب با تکمیل خودکار، این به شما امکان می‌دهد به سرعت بین پوشه‌ها بپرید:

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

فقط نام پوشه را نگذارید rm -rf * (بله، اتفاقاً این امکان پذیر است).

3. گسترش مستقیم

این یک گزینه جالب است که متغیرهای محیط را با فشار دادن 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.گلوبستار

این گزینه به شما ابرقدرت های جایگزین می دهد! اگر وارد کنید:

$ 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

در ابتدا استفاده از دستورات راه اندازی سریع از تاریخچه اختصارات می تواند کمی ترسناک باشد !! и !$.

گزینه 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

اضافه کردن نظر