برخی از گزینه های 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