هفت متغیر Bash غیرمنتظره

ادامه سلسله یادداشت ها در مورد کمتر شناخته شده است کارکرد bash، من هفت متغیر را به شما نشان می دهم که ممکن است درباره آنها ندانید.

1) PROMPT_COMMAND

ممکن است قبلاً بدانید که چگونه دستور را برای نمایش اطلاعات مفید مختلف دستکاری کنید، اما همه نمی‌دانند که می‌توانید هر بار که دستور نمایش داده می‌شود، دستور شل را اجرا کنید.

در واقع، بسیاری از دستکاری‌کننده‌های پیچیده از این متغیر برای اجرای دستورات برای جمع‌آوری اطلاعاتی که در اعلان نمایش داده می‌شوند، استفاده می‌کنند.

این را در یک پوسته جدید اجرا کنید و ببینید چه اتفاقی برای جلسه می افتد:

$ 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 curl bbc.co.uk 1873 این را در : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 این را در: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 این را اجرا کردم: 01 /05/19 13:39:25 sudo su -

قالب‌بندی با کاراکترهایی مطابقت دارد 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 فعلی خود به پوسته "والد" دیگری می برد یا فقط پنجره کنسول را به طور کامل می بندد؟

این متغیر میزان عمق لانه شما در پوسته bash را پیگیری می کند. اگر ترمینال جدیدی ایجاد کنید، روی 1 تنظیم می شود:

$ echo $SHLVL
1

سپس، اگر فرآیند پوسته دیگری را شروع کنید، تعداد افزایش می یابد:

$ 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

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