خانه - پنجره ها
لینوکس تمام متغیرهای محیطی یک فرآیند در حال اجرا. M. Garrels

اصل: Linux Fundamentals
نویسنده: پل کابوت
تاریخ انتشار: 16 اکتبر 2014
ترجمه: A. Panin
تاریخ ترجمه: 13 دسامبر 2014

فصل 12. متغیرهای پوسته

در این فصل، نحوه کار با متغیرهای محیطی را با استفاده از پوسته فرمان یاد خواهیم گرفت. این متغیرها معمولاً برای اجرای برنامه ها مورد نیاز هستند.

نماد دلار ($)

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

در زیر چند نمونه از استفاده از متغیرهای $HOSTNAME، $USER، $UID، $SHELL و $HOME آورده شده است. $ echo این پوسته است $SHELL این پوسته /bin/bash است $ echo این پوسته $SHELL است که در رایانه استفاده می شود $HOSTNAME این پوسته /bin/bash است که در رایانه استفاده می شود RHELv4u3.localdomain $ echo شناسه کاربر $USER برابر با $UID است شناسه کاربر paul برابر با 500 دلار است.

حساسیت به حروف کوچک

این مثال نشان می دهد که نام متغیرهای پوسته به حروف کوچک و بزرگ حساس هستند! $ echo سلام $USER سلام paul $ echo سلام $user سلام

ایجاد متغیرها

این مثال متغیر $MyVar را ایجاد می کند و سپس مقدار آن را تعیین می کند. سپس مثال از دستور echo برای بررسی مقدار متغیر ایجاد شده استفاده می کند. $ MyVar=555 $ echo $MyVar 555 $

نقل قول ها

توجه داشته باشید که دو گیومه همچنین امکان بسط متغیرها را در خط فرمان فراهم می کند، در حالی که نقل قول های تکی از چنین بسطی جلوگیری می کنند. $ MyVar=555 $ echo $MyVar 555 $ echo "$MyVar" 555 $ echo "$MyVar" $MyVar

پوسته bash متغیرها را با مقادیر آنها در خطوط دو نقل قول جایگزین می کند، اما این کار را در خطوط تک نقل قول انجام نمی دهد. paul@laika:~$ city=Burtonville paul@laika:~$ echo "ما اکنون در $city هستیم." اکنون در شهر برتون ویل هستیم. paul@laika:~$ echo "ما اکنون در $city هستیم." ما اکنون در شهر $ هستیم.

دستور تنظیم کنید

می توانید از دستور set برای فهرست کردن متغیرهای محیط استفاده کنید. که در سیستم های اوبونتوو دستور set Debian نیز توابع پوسته را بعد از لیست متغیرهای پوسته فهرست می کند. بنابراین برای آشنایی با تمامی عناصر لیست متغیرهای محیطی در هنگام کار با این سیستم ها پیشنهاد می شود از مجموعه | بیشتر.

دستور unset

شما باید از دستور unset برای حذف یک متغیر از محیط پوسته خود استفاده کنید. $ MyVar=8472 $ echo $MyVar 8472 $ تنظیم نشده MyVar $ echo $MyVar $

متغیر محیطی $PS1

متغیر محیطی $PS1 قالب تبریک را برای پوسته شما تنظیم می کند. هنگام وارد کردن یک رشته فرمت، می توانید از یک اسلش برای فرار از کاراکترهای خاص مانند \u برای نام کاربری یا \w برای فهرست کاری استفاده کنید. صفحه مرد پوسته bash فراهم می کند لیست کاملشخصیت های خاص

در مثال زیر، مقدار متغیر محیطی $PS1 را چندین بار تغییر می دهیم. paul@deb503:~$ PS1=دعوت دعوت نامه :\W$" paul@deb503:~$

برای جلوگیری از خطاهای مهلک، می توانید از رنگ سبز برای پیام های پوسته نمایش داده شده استفاده کنید کاربران عادیو قرمز برای درخواست های پوسته که به کاربر اصلی نمایش داده می شود. خطوط زیر را به فایل .bashrc خود اضافه کنید تا از رنگ سبز در فرمان های نمایش داده شده به کاربران عادی استفاده کنید. # درخواست پوسته رنگی ایجاد شده توسط paul RED="\[\033" WHITE="\[\033" GREEN="\[\033" BLUE="\[\033" export PS1="$(debian_chroot:+( $ debian_chroot))$GREEN\u$WHITE@$BLUE\h$WHITE\w\$ "

متغیر محیطی $PATH

متغیر محیطی $PATH دایرکتوری ها را تنظیم می کند سیستم فایل، که در آن پوسته فایل‌های باینری مورد نیاز برای اجرای دستورات را جستجو می‌کند (مگر اینکه دستور داخلی باشد یا با نام مستعار فرمان نمایش داده شود). این متغیر حاوی لیستی از مسیرهای دایرکتوری است که با کاراکترهای کولون از هم جدا شده اند. [$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:

پوسته فرمان دایرکتوری فعلی را برای باینری های اجرایی جستجو نمی کند. (عملکرد جستجو برای فایل های اجرایی در فهرست فعلی ساده ترین مکانیسم برای دسترسی غیرمجاز به داده های ذخیره شده در رایانه های دارای PC-DOS بود). اگر می‌خواهید پوسته فایل‌های اجرایی را در فهرست فعلی جستجو کند، باید نماد را اضافه کنید. تا انتهای خط که مقدار متغیر $PATH پوسته شما است. $PATH=$PATH:. $ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:. $

اگر از دستور su به جای دستور su - استفاده کنید، مقدار متغیر $PATH پوسته شما ممکن است متفاوت باشد، زیرا دستور دوم اجازه استفاده اضافی از مقادیر متغیر محیطی کاربر هدف را می دهد. به عنوان مثال، فهرست دایرکتوری ها برای کاربر ریشه که با مقدار متغیر $PATH نشان داده می شود، معمولاً شامل دایرکتوری های /sbin است. $ su رمز عبور: # echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin # exit $ su - رمز عبور: # echo $PATH /usr/local/sbin:/usr/ local/bin:/sbin:/bin:/usr/sbin:/usr/bin: #

دستور env

دستور env، هنگامی که بدون پارامتر استفاده می شود، لیستی از متغیرهای محیطی صادر شده را نمایش می دهد. تفاوت این دستور با دستور set با پارامترها در این است که دستور set همه متغیرهای محیطی را فهرست می کند، از جمله آن دسته از متغیرهایی که به پوسته های فرزند صادر نمی شوند.

علاوه بر این، دستور env می‌تواند برای راه‌اندازی یک پوسته خالص (یک پوسته بدون ارث بردن هیچ محیطی) استفاده شود. دستور env -i به شما امکان می دهد محیط را از پوسته کودک پاک کنید.

با بازنگری این مثالتوجه داشته باشید که پوسته bash متغیر محیطی $SHELL را هنگام راه اندازی تنظیم می کند. $ bash -c "echo $SHELL $HOME $USER" /bin/bash /home/paul paul $ env -i bash -c "echo $SHELL $HOME $USER" /bin/bash $

می توانید از دستور env برای تنظیم مقدار متغیر $LANG یا هر متغیر محیطی دیگری از یک نمونه پوسته bash در یک دستور استفاده کنید. در مثال زیر این فرصتبرای نشان دادن تأثیر مقدار متغیر $LANG بر عملکرد مکانیسم جستجوی الگوی فایل (برای به دست آوردن اطلاعات اضافی O این مکانیسمباید به فصل جستجوی فایل ها با استفاده از الگوها مراجعه کنید). $ env LANG=C bash -c "ls File" Filea Filea $ env LANG=en_US.UTF-8 bash -c "ls File" Filea FileA File FileB $

فرمان صادرات

با استفاده از دستور export می توانید متغیرهای پوسته را به پوسته های دیگر صادر کنید. در مثال زیر، این دستور یک متغیر محیطی را به shell های فرزند صادر می کند. $ var3=سه $ var4=چهار $ صادرات var4 $ echo $var3 $var4 سه چهار $ bash $ echo $var3 $var4 چهار

با این حال، با استفاده از این دستور، متغیر به پوسته فرمان والد صادر نمی شود (مثال قبلی در ادامه آمده است). $ export var5=پنج $ echo $var3 $var4 $var5 چهار پنج $ خروج $ echo $var3 $var4 $var5 سه چهار $

تحدید حدود متغیر

تا به حال، دیده‌ایم که پوسته bash متغیری را که با علامت دلار شروع می‌شود تفسیر می‌کند و تا زمانی که اولین کاراکتر غیرالفبایی که زیرخط نیست، ادامه می‌یابد. در برخی شرایط این رفتار می تواند مشکل ساز باشد. برای حل این مشکل می توان از بریس های فرفری به روشی که در مثال زیر نشان داده شده است استفاده کرد. $ prefix=Super $ echo Hello $prefixman and $prefixgirl Hello and $ echo Hello $(prefix)man and $(prefix)girl سلام سوپرمن و سوپرگرل $

متغیرهای نامحدود

مثال زیر سعی می‌کند مقدار متغیر $MyVar را نمایش دهد، اما به دلیل عدم وجود متغیر، ناموفق است. به طور پیش فرض، پوسته چیزی را چاپ نمی کند اگر متغیر محدود نباشد (وجود ندارد). $ echo $MyVar$

با این حال، یک گزینه پوسته nounset وجود دارد که اگر متغیری که استفاده می کنید وجود نداشته باشد، می توانید از آن برای ایجاد خطا استفاده کنید. paul@laika:~$ set -u paul@laika:~$ echo $Myvar bash: Myvar: متغیر unbound paul@laika:~$ set +u paul@laika:~$ echo $Myvar paul@laika:~$

در پوسته bash، دستور set -u با دستور set -o یکسان است و به طور مشابه، دستور set +u با دستور set +o یکسان است.

تمرین: متغیرهای پوسته

2. یک پاسخ متغیر ایجاد کنید که مقدار آن 42 باشد.

3. مقدار متغیر $LANG را به مقدار متغیر $MyLANG کپی کنید.

4. متغیرهای پوسته ای که در حال حاضر استفاده می شوند را فهرست کنید.

5. تمام متغیرهای پوسته صادراتی را فهرست کنید.

6. آیا اطلاعات مربوط به متغیر شما در خروجی دستورات env و set وجود دارد؟

7. متغیر پاسخ خود را از بین ببرید.

8. دو متغیر ایجاد کنید و یکی از آنها را صادر کنید.

9. مقدار متغیر صادراتی را در پوسته فرمان تعاملی فرزند چاپ کنید.

10. یک متغیر ایجاد کنید و مقدار "Dumb" را به آن اختصاص دهید، سپس یک متغیر دیگر با مقدار "do" به همین ترتیب ایجاد کنید. از دستور echo و دو متغیر ایجاد شده برای چاپ کلمه "دامبلدور" استفاده کنید.

11. لیستی از کاراکترهای کنترلی با اسلش برگشتی را در صفحه مرد پوسته bash پیدا کنید. یک کاراکتر کنترلی به متغیر PS1 اضافه کنید تا زمان در پیام تبریک پوسته نمایش داده شود.

روش صحیح برای تمرین: متغیرهای پوسته

1. از دستور echo برای چاپ رشته "Hello" و سپس نام خود استفاده کنید. (از متغیر bash shell استفاده کنید!)

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

به عنوان مثال، دستور PWD از یک متغیر سیستم برای حفظ دایرکتوری کاری قبلی استفاده می کند. متغیرهای محیط کاربر توسط کاربر، برای پوسته فعلی، به طور موقت یا دائم تنظیم می شوند. کل مفهوم افزودن و حذف متغیرهای پوسته حول چندین فایل، دستورات و پوسته های مختلف می چرخد.

به طور کلی، یک متغیر محیطی می تواند سه نوع باشد:

1. متغیرهای محیطی محلی

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

2. متغیرهای پوسته سفارشی

این متغیرهای پوسته در لینوکس برای یک کاربر خاص تعریف شده اند و هر بار که کاربر با استفاده از ترمینال محلی وارد می شود یا از راه دور متصل می شود، بارگذاری می شوند. چنین متغیرهایی معمولاً در فایل‌های پیکربندی ذخیره می‌شوند: bashrc.، .bash_profile، .bash_login، .profile یا فایل‌های دیگری که در فهرست کاربر قرار دارند.

3. متغیرهای محیطی سیستم

این متغیرها در سراسر سیستم برای همه کاربران در دسترس هستند. آنها در راه اندازی سیستم از بارگیری می شوند فایل های سیستمیتنظیمات: /etc/environment، /etc/profile، /etc/profile.d/ /etc/bash.bashrc.

فایل های پیکربندی متغیر محیط لینوکس

در اینجا ما نگاهی گذرا به فایل‌های پیکربندی مختلف فهرست‌شده در بالا که برای پیکربندی متغیرهای محیطی برای کل سیستم یا یک کاربر خاص استفاده می‌شوند، خواهیم انداخت.

.bashrc

این یک فایل متغیر مخصوص کاربر است. هر بار که کاربر یک جلسه ترمینال ایجاد می کند، بارگذاری می شود، به عبارت دیگر، یک ترمینال جدید باز می شود. همه متغیرهای محیطی ایجاد شده در این فایل هر بار که یک جلسه ترمینال جدید شروع می شود، اعمال می شوند.

.bash_profile

این متغیرها هر بار که کاربر از راه دور از طریق SSH متصل می شود، تأثیر می گذارد. اگر این فایل وجود نداشته باشد، سیستم به دنبال .bash_login یا .profile خواهد بود.

/etc/محیط

این فایل برای ایجاد، ویرایش و حذف هر گونه متغیر محیطی در سطح سیستم می باشد. متغیرهای محیطی ایجاد شده در این فایل برای کل سیستم، برای هر کاربر و حتی هنگام اتصال از راه دور در دسترس هستند.

/etc/bash.bashrc

سیستم بشرک. این فایل برای هر کاربر، هر بار که یک جلسه ترمینال جدید ایجاد می کند، اجرا می شود. این فقط برای کاربران محلی کار می کند؛ هنگامی که از طریق اینترنت متصل می شوند، چنین متغیرهایی قابل مشاهده نخواهند بود.

/etc/profile

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

تمام متغیرهای محیط لینوکس ایجاد شده با استفاده از این فایل ها را می توان به سادگی با حذف آنها از آنجا حذف کرد. فقط پس از هر تغییر، باید یا از سیستم خارج شوید و دوباره وارد شوید یا این دستور را اجرا کنید:

نام فایل منبع

اضافه کردن متغیرهای محیط کاربر و سیستم در لینوکس

حالا که کمی تئوری می دانید، بیایید به سراغ عمل برویم. متغیرهای محیطی محلی در لینوکس را می توان با دستورات زیر ایجاد کرد:

var = ارزش
$ export var=value

این متغیرها فقط برای جلسه ترمینال فعلی در دسترس خواهند بود.

چندین دستور وجود دارد که می توانید برای حذف متغیرهای محیطی استفاده کنید:

1. استفاده از env

به طور پیش فرض، می توانید از env برای مشاهده تمام متغیرهای محیطی استفاده کنید. اما با گزینه -i به شما این امکان را می دهد که به طور موقت همه متغیرهای پوسته را حذف کنید و دستور را بدون متغیر اجرا کنید.

دستور env –i

Var هر متغیری است که می خواهید به این دستور منتقل کنید.

این دستور پوسته را بدون هیچ گونه متغیر محیطی شروع می کند:

پس از راه اندازی چنین محیطی، هیچ متغیری در دسترس نخواهد بود، اما پس از خروج همه چیز به جای خود باز می گردد.

2. استفاده از unset

این روش دیگری برای حذف متغیرهای محیط لینوکس است. Unset یک متغیر را با نام تا پایان جلسه جاری حذف می کند:

متغیر_نام تنظیم نشده است

3. مقدار متغیر را روی "" تنظیم کنید

این ساده ترین راه برای حذف متغیرهای محیطی در لینوکس است؛ با قرار دادن یک متغیر برای خالی کردن، آن را برای بقیه جلسه فعلی حذف می کنید.

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

ایجاد متغیرهای محیط کاربر و سیستم

در این بخش، نحوه تنظیم و حذف متغیرهای سیستم و کاربر را نه تنها برای جلسه فعلی، بلکه به گونه‌ای که پس از راه‌اندازی مجدد اثر باقی بماند، بررسی خواهیم کرد.

1. متغیرهای محلی را در لینوکس تنظیم و حذف کنید

بیایید یک متغیر محلی VAR ایجاد کنیم و آن را روی هر مقداری تنظیم کنیم، سپس آن را تنظیم کنیم و مطمئن شویم که حذف شده است:

VAR1 = گمشده
$ echo $VAR1
$تنظیم VAR1
$ echo $VAR1

راه دیگر برای ایجاد یک متغیر، دستور صادرات است. بیایید با اختصاص یک مقدار خالی آن را حذف کنیم:

صادرات VAR = "از دست رفته"
$ echo $VAR
$VAR=
$ echo $VAR

حالا بیایید یک متغیر VAR2 ایجاد کنیم و به آن مقدار بدهیم. و سپس با اجرای env -i به طور موقت همه متغیرهای محلی را حذف کنید. یک پوسته بدون هیچ متغیری شروع می شود. پس از ورود به خروج، همه متغیرها بازیابی خواهند شد.

VAR2 = گمشده
$ echo $VAR2
$ env -i بش
$ echo $VAR2

تنظیم و حذف متغیرهای کاربر

فایل .bashrc را در فهرست اصلی خود با افزودن یک دستور صادرات برای صادرات متغیر مورد نظر ویرایش کنید. سپس دستور source را اجرا کنید تا تغییرات اعمال شود. بیایید، برای مثال، متغیر CD را ایجاد کنیم:

این خط را اضافه کنید (o، سپس paste، سپس Esc و :wq):

صادرات CD = "این خانه گم شده است"

اکنون باقی مانده است که پیکربندی را به روز کنیم:

منبع.bashrc
$echo $CD

برای حذف این متغیر، به سادگی آن را از .bashrc حذف کنید.

حالا بیایید با استفاده از .bash_profile یک متغیر محیطی اضافه کنیم. همانطور که می دانید این متغیر فقط در هنگام ورود از راه دور در دسترس خواهد بود:

vi .bash_profile

خط را اضافه کنید:

export VAR2="این خانه گم شده است"

و این دستورات را اجرا کنید تا تغییرات اعمال شود و بررسی کنید که متغیر اضافه شده است:

source.bash_profile
$ echo $VAR2

متغیر در دسترس نیست زیرا شما یک جلسه ترمینال محلی ایجاد کرده اید، اکنون از طریق ssh متصل شوید:

ssh user@localhost
$ echo $VAR2

شما می توانید این متغیر محیطی را مانند حالت قبلی با حذف آن از فایل حذف کنید.

اظهار نظر: این متغیرها همیشه در دسترس هستند، اما نه برای همه کاربران.

تنظیم و حذف متغیرهای محیطی سیستم

بیایید یک متغیر در دسترس همه کاربران ایجاد کنیم جلسات ترمینال، به جز موارد حذف شده، با افزودن آن به /etc/bash.profile:

vi /etc/bash.profile

export VAR="این متغیر در سراسر سیستم است"

سپس به روز می کنیم:

منبع /etc/bash.bashrc

اکنون این متغیر در تمام پایانه ها برای همه کاربران در دسترس است:

پژواک $VAR
$sudo su
$ echo $VAR
$su -
$ echo $VAR

اگر می خواهید یک متغیر محیطی را برای همه کاربرانی که از راه دور به این دستگاه متصل می شوند در دسترس قرار دهید، فایل /etc/profile را ویرایش کنید:

export VAR1="این متغیر در سراسر سیستم فقط برای جلسات راه دور است"

پیکربندی را به روز کنید و در دسترس بودن متغیر را بررسی کنید، فقط از راه دور در دسترس خواهد بود:

منبع /etc/profile
$ echo $VAR1

اگر می‌خواهید یک متغیر محیطی در لینوکس اضافه کنید تا هم از راه دور و هم برای جلسات محلی قابل دسترسی باشد، آن را به /etc/environment صادر کنید:

vi /etc/environment

export VAR12="من همه جا در دسترس هستم"

بررسی می کنیم:

منبع /etc/environment
$ echo $VAR12
$sudo su
$ echo $VAR12
$ خروج
لوکال هاست $ssh
$ echo $VAR12

مفهوم پارامتر در پوسته ضربه شدیدمشابه مفهوم متغیر در زبان های برنامه نویسی معمولی است. نام پارامتر (یا شناسه) می تواند کلمه ای متشکل از کاراکترهای الفبایی، اعداد و زیرخط (فقط اولین کاراکتر کلمه نمی تواند عدد باشد)، یک عدد یا یکی از کاراکترهای ویژه زیر باشد: * , @ , # , ? , - (خط ربط)، $ , ! , 0 , _ (زیر خط کشیدن).

اگر مقداری به آن نسبت داده شود، گفته می شود که یک پارامتر تنظیم یا تنظیم می شود. مقدار نیز می تواند یک رشته خالی باشد. برای نمایش مقدار یک پارامتر، از نماد استفاده کنید $ قبل از نام او بله تیم

نام اکو $

کلمه را روی صفحه نمایش می دهد نام، و تیم

$echo $name

مقدار متغیر نام را برمی گرداند (البته اگر یکی تنظیم شده باشد).

5.6.1 انواع پارامترها

پارامترها به سه دسته تقسیم می شوند: پارامترهای موقعیتی، پارامترهای خاص(که نام آنها کاراکترهای ویژه ای است که به تازگی ذکر شده است) و متغیرهای پوسته.

نام ها (شناسه ها) پارامترهای موقعیتیاز یک یا چند رقم (نه یک صفر) تشکیل شده است. مقادیر پارامتر موقعیتی آرگومان هایی هستند که هنگام شروع پوسته داده شده اند (آگومان اول مقدار پارامتر موقعیتی 1 و غیره است). می توانید مقدار یک پارامتر موقعیتی را با استفاده از دستور داخلی تغییر دهید تنظیم. مقادیر این پارامترها نیز در حالی که پوسته یکی از توابع را اجرا می کند تغییر می کند (این مورد در زیر مورد بحث قرار خواهد گرفت. بخش 5.8).

پارامترهای خاصالگوهایی هستند که جایگزینی (جایگزینی) آنها به شرح زیر انجام می شود.

جدول 5.2.پارامترهای خاص

پارامتر

قوانین تعویض

با شروع پارامترهای موقعیتی، از اولی شروع می شود. اگر جایگزینی در داخل گیومه های دوتایی انجام شود، این پارامتر با یک کلمه متشکل از تمام پارامترهای موقعیتی جایگزین می شود که با اولین کاراکتر متغیر IFS ویژه (در زیر بحث شده است) از هم جدا می شوند. یعنی «$*» معادل «$1c$2c...» است، که در آن c اولین کاراکتر در مقدار متغیر IFS است. اگر IFS روی خالی تنظیم شود یا مقداری تنظیم نشده باشد، پارامترها با فاصله از هم جدا می شوند

با شروع پارامترهای موقعیتی، از اولی شروع می شود. اگر جایگزینی در داخل گیومه های دوگانه انجام شود، هر پارامتر با یک کلمه جداگانه جایگزین می شود. بنابراین، ``$@"" معادل ""$1""""$2" است... اگر هیچ پارامتر موقعیتی وجود نداشته باشد، هیچ مقداری تخصیص داده نمی شود (پارامتر @ به سادگی حذف می شود)

با مقدار اعشاری تعداد پارامترهای موقعیت جایگزین شده است

با وضعیت خروج آخرین کانال برنامه پیش زمینه در حال اجرا جایگزین شده است

(خط ربط)

با مجموعه فعلی مقادیر پرچم که با استفاده از دستور داخلی تنظیم شده است جایگزین شد تنظیمیا هنگام راه اندازی خود پوسته

با شناسه فرآیند (P ID) پوسته جایگزین شد

با شناسه فرآیند (P ID) آخرین دستور پس‌زمینه اجرا شده (اجرا شده به صورت ناهمزمان) جایگزین شد.

با نام پوسته یا اسکریپت برای اجرا جایگزین شده است. اگر ضربه شدیدبرای اجرای یک فایل دسته ای اجرا می شود، $0 نام فایل است. در غیر این صورت این مقدار برابر است با مسیر کامل به پوسته

(زیر خط بکش)

با آخرین آرگومان دستور قبلی اجرا شده جایگزین می شود (اگر این یک پارامتر یا متغیر باشد، مقدار آن جایگزین می شود)

پارامترهای ویژه فهرست شده در جدول بالا از این جهت متفاوت هستند که فقط می توان به آنها ارجاع داد. شما نمی توانید مقادیری را به آنها اختصاص دهید.

متغیراز دیدگاه پوسته، پارامتری است که با یک نام مشخص می شود. مقادیر با استفاده از عملگر زیر به متغیرها اختصاص داده می شود:

$name=value

جایی که نامنام متغیر و ارزش- مقدار اختصاص داده شده به آن (می تواند یک رشته خالی باشد). نام متغیر فقط می تواند از اعداد و حروف تشکیل شده باشد و نمی تواند با یک عدد شروع شود. مقدار می تواند هر متنی باشد. اگر مقداری حاوی کاراکترهای خاص باشد، باید در گیومه قرار گیرد. البته مقدار اختصاص داده شده حاوی این نقل قول ها نیست. اگر متغیر تنظیم شده باشد، می توان آن را با استفاده از دستور shellbuildin حذف کرد تنظیم نشده.

مجموعه تمام متغیرهای پوسته مجموعه با مقادیر اختصاص داده شده به آنها محیط یا محیط پوسته نامیده می شود. با استفاده از دستور می توانید آن را مشاهده کنید تنظیمبدون پارامتر (فقط شاید شما باید یک خط لوله را سازماندهی کنید "تنظیم | کمتر"). خروجی این دستور همه متغیرهای محیط را به ترتیب حروف الفبا فهرست می کند.برای مشاهده مقدار یک متغیر خاص می توانید به جای دستور تنظیم(در خروجی آن همچنان می توانید متغیر مورد نظر را جستجو و جستجو کنید) می توانید از دستور استفاده کنید

$echo $name

(البته در این حالت باید نام متغیر مورد نظر خود را بدانید).

از جمله متغیرهایی که در خروجی فرمان خواهید دید عبارتند از تنظیم، متغیرهای بسیار جالبی وجود دارد. به عنوان مثال به متغیر RANDOM توجه کنید. اگر دستور را چندین بار پشت سر هم اجرا کنید

$ اکو $RANDOM

هر بار یک مقدار جدید دریافت خواهید کرد. واقعیت این است که این متغیر یک عدد صحیح تصادفی را از بازه 0 - 32768 برمی گرداند.

5.6.2 درخواست های شل

یکی از متغیرهای بسیار مهم نام دارد PS1. این متغیر نوع دعوتی را مشخص می کند که ضربه شدیدزمانی که منتظر است دستور بعدی توسط کاربر وارد شود خروجی می گیرد. به طور پیش فرض، این متغیر روی "\s-\v\$" تنظیم شده است. در واقع در ضربه شدیدچهار دعوت وجود دارد که در موقعیت های مختلف استفاده می شود. متغیر PS1نوع اعلانی را مشخص می کند که زمانی که پوسته منتظر وارد شدن فرمان است، صادر می شود. اعلان ثانویه که توسط متغیر مشخص شده است PS2، زمانی ظاهر می شود که پوسته منتظر است تا کاربر اطلاعات بیشتری را که برای ادامه دستور یا برنامه در حال اجرا لازم است وارد کند. متغیر پیش فرض PS2معنی دارد " >" . ممکن است قبلاً این فرمان را هنگام اجرای دستور مشاهده کرده باشید گربهبرای وارد کردن داده ها از صفحه کلید به یک فایل. مثال دیگر دستور است ftp، پس از راه اندازی که دعوتنامه نیز به این شکل در می آید.

اعلان متغیر PS3، در دستور استفاده می شود انتخاب کنید. اعلان متغیر PS4، قبل از هر دستور در آن زمان چاپ می شود ضربه شدیدبر پیشرفت اجرا نظارت می کند. مقدار پیش فرض " + ".

در صورت تمایل می توانید نوع متغیرها را تغییر دهید PS1و PS2. در این مورد، می توانید از هر علامت وارد شده از صفحه کلید و همچنین تعداد معینی از کاراکترهای خاص استفاده کنید که هنگام ایجاد رشته درخواست، مطابق با جدول رمزگشایی می شوند. 5.3 (مثلاً فقط برخی از آنها را فهرست می کنیم؛ برای یک لیست کامل، صفحه مرد ابزار را ببینید ضربه شدید) .

جدول 5.3. نمادهای خاصبرای ایجاد دعوت نامه

سمبل

معنای آن

بوق (کد اسکی 07)

تاریخ در قالب "روز، ماه، روز"، به عنوان مثال، چهارشنبه، 17 اکتبر.

نام میزبان تا اولین نقطه

نام میزبان کامل

زمان فعلیدر قالب 24 ساعته: HH:MM:SS (ساعت:دقیقه:ثانیه)

زمان فعلی در قالب 12 ساعت: HH:MM:SS

زمان کنونی در قالب 12 ساعته صبح/ظهر

نام کاربری که پوسته را شروع کرده است

نام کامل دایرکتوری فعلی (با شروع از ریشه)

فهرست کاری فعلی (مسیری مشخص نشده است)

اگر پوسته به عنوان superuser در حال اجرا باشد، نماد # و نماد $ ، اگر پوسته توسط یک کاربر عادی راه اندازی شده باشد.

\nn

کاراکتر دارای کد هشتگانه nnn

خط جدید (فید خط)

نام پوسته

شماره تیم فعلی

یک اسلش معکوس

شروع دنباله ای از کاراکترهای غیرچاپی (این کاراکتر می تواند برای گنجاندن دنباله ای از کاراکترهای کنترل ترمینال در متن راهنمای ابزار استفاده شود)

پایان دنباله کاراکترهای غیر قابل چاپ

شماره سریال این دستور در تاریخچه دستورات

شماره دستور فعلی (شماره سریال دستوری که در جلسه جاری اجرا می شود) ممکن است با شماره این دستور در لیست تاریخچه فرمان متفاوت باشد، زیرا دومی شامل دستوراتی است که در فایل تاریخچه فرمان ذخیره شده اند.

هنگامی که مقدار متغیری که یک اشاره را تعریف می کند توسط پوسته خوانده شد، می توان با توجه به قوانین بسط پارامتر، جایگزینی در نام دستورات و عبارات حسابی و تقسیم کلمات، آن را جایگزین کرد. این قوانین در زیر، در بخش مورد بحث قرار خواهند گرفت. 5.7.

مثلا بعد از اجرای دستور (از آنجایی که در رشته فاصله وجود دارد، نقل قول لازم است)

# PS1="[\u@\h \W]\$"

اعلان استاندارد یک براکت مربع، نام کاربری، نماد را نمایش می دهد @ ، نام کامپیوتر، فاصله، نام دایرکتوری فعلی (بدون مسیر)، بسته شدن براکت و نماد $ (اگر یک کاربر ساده در پوسته در حال اجرا باشد) یا # (اگر پوسته به صورت روت در حال اجرا باشد).

5.6.3 متغیر مسیر

متغیر بسیار مهم دیگری نام دارد مسیر. لیستی از مسیرهای دایرکتوری هایی را که در آن ها قرار دارند مشخص می کند ضربه شدیددر مواردی که مسیر کامل فایل در خط فرمان مشخص نشده باشد، فایل ها (به ویژه فایل های دارای دستورات) را جستجو می کند. دایرکتوری های فردی در این لیست با دو نقطه از هم جدا شده اند. متغیر پیش فرض مسیرشامل دایرکتوری ها /usr/local/bin، /bin، /usr/bin، /usr/X11R6/bin،یعنی به نظر می رسد:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

برای اضافه کردن دایرکتوری به این لیست، باید دستور زیر را اجرا کنید:

# PATH=$PATH:new_path.

هنگام انجام جستجو، پوسته دایرکتوری ها را به ترتیب فهرست شده در متغیر PATH جستجو می کند.

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

5.6.4 متغیر IFS

این متغیر جداکننده فیلد داخلی را مشخص می کند که در عملیات تقسیم کلمه در هنگام تبدیل استفاده می شود. خط فرمان، قبل از اجرای خط فرمان برای اجرا توسط پوسته اجرا می شود. مقدار پیش فرض این متغیر "<Пробел><Символ_ новой_ строки>".

5.6.5 دایرکتوری های فعلی و خانگی

نام دایرکتوری فعلی در یک متغیر محیطی (به نام PWD) ذخیره می شود و هر بار که برنامه شروع می شود مقدار این متغیر تغییر می کند. سی دی(و همچنین هنگام تغییر دایرکتوری فعلی به روش دیگری، به عنوان مثال، از طریق Midnight Commander).

به همان شیوه نام و نام خانوادگی(نشان دهنده مسیر) دایرکتوری خانگی کاربری که این فرآیند را راه اندازی کرده است در متغیر HOME ذخیره می شود.

5.6.6 تیم صادرات

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

$name=value

باید آن را بنویسید

$export name=value

در این حالت، تمام برنامه‌های راه‌اندازی شده از پوسته (از جمله نمونه‌های ثانویه خود پوسته) به متغیرهای تعریف‌شده به این صورت دسترسی خواهند داشت، یعنی می‌توانند مقادیر خود را با نام فراخوانی کنند.

V. Kostromin (kos در rus-linux dot net) - 5.6. پارامترها و متغیرها محیط پوسته

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

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

بسته Coreutils شامل برنامه‌های env و printenv است. برای فهرست کردن همه متغیرهای محیطی که در حال حاضر دارای یک مقدار هستند، به سادگی تایپ کنید:

$printenv

دو نوع متغیر محیطی در پوسته bash وجود دارد:

  • متغیرهای جهانی
  • متغیرهای محلی

متغیرهای محیطی جهانی

از جلسه پوسته، متغیرهای محیط جهانی و هر فرآیند فرزندی که پوسته ایجاد می کند نمایش داده می شود.

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

به‌طور پیش‌فرض، سیستم لینوکس متغیرهای محیطی جهانی خاصی را هنگام شروع یک جلسه bash تنظیم می‌کند. متغیرهای محیط سیستم هر بار از تمام حروف بزرگ استفاده می کنند تا آنها را از متغیرهای محیط کاربر عادی متمایز کنند.

متغیرهای محیطی محلی

زیرا نام آنها نشان می دهد که متغیرهای محیط محلی فقط در فرآیند محلی که در آن تعریف شده اند قابل مشاهده هستند. در مورد متغیرهای محیطی محلی گیج نشوید، آنها به اندازه متغیرهای محیطی جهانی اهمیت دارند. در واقع سیستم لینوکس نیز به صورت پیش فرض متغیرهای محیطی استاندارد محلی را برای شما تعریف می کند. هنگامی که سعی می کنید لیستی از متغیرهای محیط محلی را ببینید، این کار مشکل می شود. متأسفانه هیچ دستوری برای ما وجود ندارد که فقط متغیرهای محیط محلی را نمایش دهد. دستوری وجود دارد که تمام متغیرهای محیطی تنظیم شده برای یک فرآیند خاص را نمایش می دهد. توجه داشته باشید که این شامل متغیرهای محیط جهانی نیز می شود.

تنظیم متغیرهای محیطی

شما می توانید متغیرهای محیطی خود را مستقیماً از پوسته bash ایجاد کنید. در بخش بعدی، ما به شما نشان خواهیم داد که چگونه متغیرهای محیطی خود را ایجاد کنید و آنها را از پوسته یا برنامه پوسته تعاملی خود ارجاع دهید.

تنظیم متغیرهای محیطی محلی

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

$ andreyex_test=تست کردن $ echo $andreyex_test تست $

تبریک می گویم، شما به تازگی اولین متغیر خود را ایجاد کرده اید. فقط به یاد داشته باشید که هر زمان که نیاز به ارجاع به مقدار متغیر محیط andreyex_test داشتید، فقط آن را با نام $andreyex_test ارجاع دهید.

اگر نیاز به اختصاص رشته ای از مقادیر حاوی فاصله دارید، باید از یک نقل قول برای نشان دادن شروع و پایان رشته استفاده کنید:

$ andreyex_test=آزمایش یک دستور طولانی -bash: a: پیدا نشد$ andreyex_test="آزمایش یک رشته طولانی" $ echo $andreyex_test تست یک رشته طولانی

اگر بدون نقل قول باقی بماند، پوسته bash فرض می کند که کاراکتر بعدی دستور دیگری برای پردازش است.

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

در پوسته bash، این قرارداد استاندارد است. اگر متغیرهای محیطی جدیدی را تنظیم می کنید، این مورد نیاز نیست، اما حروف کوچک توصیه می شود. این کمک می کند تا متغیرهای محیط شخصی شما را از نتایج متغیرهای محیط سیستم متمایز کنید.

توجه داشته باشید: بسیار مهم است که بین نام متغیر محیطی، علامت مساوی و مقدار فاصله وجود نداشته باشد. اگر هر فاصله ای را در انتساب قرار دهید، پوسته bash مقدار را به عنوان یک دستور جداگانه تفسیر می کند:

$ andreyex_test2 = test -bash: andreyex_test2: دستور $ پیدا نشد

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

$ bash $ echo $andreyex_test $ خروج خروج $ echo $andreyex_test تست یک رشته طولانی $

در این مورد، ما پوسته کودک را راه اندازی کردیم. همانطور که متوجه شدید، متغیر محیط andreyex_test در پوسته فرزند موجود نیست (شامل یک مقدار خالی است). پس از اینکه پوسته فرزند را ترک کردیم و به پوسته اصلی برگشتیم، متغیر محیط محلی همچنان در دسترس بود.

به همین ترتیب، اگر پس از خروج از فرآیند فرزند، یک متغیر محیط محلی را در یک فرآیند فرزند تنظیم کنید، متغیر محیط محلی دیگر قابل دسترسی نیست:

$ bash $ andreyex_test=آزمایش $ echo $andreyex_test تست $ خروج خروج $ echo $andreyex_test $

مجموعه متغیر محیط andreyex_test در پوسته فرزند وقتی به پوسته والد برمی گردیم وجود ندارد.

تنظیم متغیرهای محیطی جهانی

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

این با استفاده از دستور صادرات انجام می شود:

$ echo $andreyex_test تست یک رشته طولانی $ صادرات andreyex_test $ bash $ echo $andreyex_test تست یک رشته طولانی $

پس از استفاده از دستور export در متغیر محیط محلی andreyex_test، شروع کردیم روند جدیدپوسته و به مقدار متغیر محیط andreyex_test نگاه کرد. این بار، دستور صادرات، متغیر محیط جهانی را جهانی کرد، بنابراین ارزش خود را حفظ کرد.

توجه داشته باشید که وقتی یک فرمان صادراتی را در یک متغیر محیطی محلی اجرا می کنید، از علامت دلار برای اشاره به نام متغیر استفاده نمی کنید.

حذف متغیرهای محیطی

بدیهی است که اگر بتوانید یک متغیر محیطی جدید ایجاد کنید، منطقی است که می‌توانید متغیر محیط موجود را نیز حذف کنید. این را می توان با استفاده از دستور unset انجام داد:

$ echo $andreyex_test تست $ unset andreyex_test $ echo $andreyex_test $

اگر به یک متغیر محیطی در دستور unset اشاره می کنید، توجه داشته باشید که از علامت دلار استفاده نکنید.

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

$ andreyex_test=آزمایش $ صادرات andreyex_test $ bash $ echo $andreyex_test تست $ تنظیم نشده andreyex_test $ echo $andreyex_test $ خروج خروج $ echo $andreyex_test تست $

در این مثال، یک متغیر محیطی محلی به نام andreyex_test تنظیم می کنیم، سپس آن را صادر می کنیم تا آن را به یک متغیر محیطی جهانی تبدیل کنیم. سپس فرآیند پوسته فرزند را شروع کردیم و بررسی شدیم تا مطمئن شویم که متغیر محیط جهانی andreyex_test هنوز در دسترس است. سپس، در حالی که هنوز در پوسته فرزند بودیم، از دستور unset برای حذف متغیر محیطی جهانی andreyex_test استفاده کردیم و سپس از پوسته فرزند خارج شدیم. حالا به پوسته والد اصلی برگردیم، مقدار متغیر محیط andreyex_test را بررسی کردیم و هنوز معتبر است.

متغیرهای پیش فرض محیط پوسته

متغیرهای محیطی خاصی وجود دارد که پوسته bash از آنها برای تعیین محیط سیستم استفاده می کند. همیشه می توانید این متغیرها را برای استفاده در سیستم لینوکس خود حساب کنید. از آنجا که پوسته bash مشتق شده از پوسته اصلی Unix Bourne است، همچنین شامل متغیرهای محیطی است که در ابتدا در آن پوسته تعریف شده اند.

مثال‌های زیر نشان می‌دهند که متغیرهای محیطی ارائه‌شده توسط پوسته bash با پوسته اصلی Unix Bourne سازگار هستند.

تا کنون با ارزش ترین متغیر محیطی در این لیست، متغیر محیطی PATH است.

هنگامی که دستوری را در پوسته فرمان پوسته (واسط خط فرمان) وارد می کنید، پوسته باید سیستم را جستجو کند تا برنامه را پیدا کند. دایرکتوری هایی که برای دستورات جستجو می کند توسط متغیر محیطی PATH تعیین می شود. در یک سیستم لینوکس، متغیر محیطی PATH باید چیزی شبیه به این باشد:

$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin $

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

علاوه بر متغیرهای محیط استاندارد بورن، پوسته bash چندین متغیر را نیز ارائه می دهد، همانطور که نشان داده شده است:

متغیرهای Bash Shell Bourne:

CDPATH: فهرستی از دایرکتوری‌های جدا شده با کولون که به عنوان مسیر جستجو برای دستور cd استفاده می‌شود.
HOME: فهرست اصلی کاربر فعلی.
IFS: لیستی از کاراکترهایی که فیلدهایی را که پوسته برای جداسازی رشته های متنی استفاده می کند، جدا می کند.
پست الکترونیکی: نام فایل برای صندوق پستیکاربر فعلی. پوسته bash این فایل را بررسی می کند پست جدید.
MAILPATH: فهرستی از چندین نام فایل برای صندوق پستی کاربر فعلی. پوسته bash هر فایل موجود در این لیست را برای ایمیل جدید بررسی می کند.
OPTARG: مقدار آخرین آرگومان پارامتر پردازش شده توسط دستور getopts.
OPTIND: مقدار شاخص آخرین آرگومان پارامتر پردازش شده توسط دستور getopts.
PATH: فهرستی از دایرکتوری‌های جدا شده با کولون که در آن پوسته به دنبال دستورات می‌گردد.
PS1: رشته خط فرمان اصلی.
PS2: رشته اعلان رابط خط فرمان پوسته ثانویه.

متغیرهای محیطی Shell bash:

BASH: نام مسیر کاملا واجد شرایط برای اجرای نمونه فعلی پوسته bash.
BASH_ENV: هنگام نصب، هر اسکریپت bash سعی می کند قبل از اجرا، فایل راه اندازی تعریف شده توسط این متغیر را اجرا کند.
BASH_VERSION: شماره نسخه نمونه پوسته bash فعلی.
BASH_VERSINFO: آرایه ای از متغیرها شامل شماره نسخه اصلی و فرعی نمونه فعلی پوسته bash است.
COLUMNS: شامل عرض پایانه مورد استفاده برای نمونه فعلی پوسته bash است.
COMP_CWORD: نمایه ای در متغیر COMP_WORDS که حاوی موقعیت مکان نما است.
COMP_LINE: خط فرمان فعلی.
COMP_POINT: شاخص موقعیت مکان نما فعلی نسبت به مبدا تیم فعلی.
COMP_WORDS: یک آرایه متغیر حاوی کلمات جداگانه در خط فرمان فعلی.
COMPREPLY: یک آرایه متغیر حاوی کدهای خروج احتمالی تولید شده توسط تابع پوسته.
DIRSTACK: آرایه ای از متغیرها حاوی محتوای فعلی پشته دایرکتوری.
EUID: شناسه کاربری موثر کاربر فعلی.
FCEDIT: ویرایشگر پیش فرض که توسط دستور fc استفاده می شود.
FIGNORE: فهرستی از پسوندهای جدا شده با کولون که باید هنگام تکمیل نام فایل نادیده گرفته شوند.
FUNCNAME: نام تابع شل در حال اجرا است.
GLOBIGNORE: فهرستی از الگوهای جدا شده با دو نقطه که مجموعه‌ای از نام‌های فایل را مشخص می‌کند تا هنگام گسترش نام فایل نادیده گرفته شوند.
GROUPS: یک آرایه متغیر حاوی لیستی از گروه هایی که کاربر فعلی یکی از اعضای آن است.
histchars: حداکثر سه کاراکتر که گسترش تاریخ را کنترل می کنند.
HISTCMD: شماره تاریخچه دستور فعلی.
HISTCONTROL: کنترل می کند که کدام دستورها در لیست تاریخچه پوسته وارد می شوند.
HISTFILE: نام فایل برای ذخیره لیست تاریخچه پوسته (پیش فرض history.bash است).
HISTFILESIZE: حداکثر تعداد خطوط برای ذخیره در فایل تاریخچه.
HISTIGNORE: لیستی از الگوهای جدا شده با دو نقطه استفاده می شود تا مشخص شود کدام دستورات برای فایل تاریخچه نادیده گرفته می شوند.
HISTSIZE: حداکثر تعداد دستورات ذخیره شده در فایل تاریخچه.
HOSTFILE: حاوی نام فایلی است که باید زمانی که پوسته باید نام میزبان را پر کند خوانده شود.
HOSTNAME: نام میزبان فعلی.
HOSTTYPE: رشته ای که ماشین bash-shell در حال اجرا را توصیف می کند.
IGNOREEOF: تعداد کاراکترهای متوالی EOF که پوسته باید قبل از خروج دریافت کند. اگر این مقدار وجود نداشته باشد، به صورت پیش فرض یک است.
INPUTRC: نام فایل اولیه Readline (پیش فرض .inputrc است).
LANG: دسته محلی برای پوسته.
LC_ALL: برای تعیین دسته محلی، متغیر LANG را لغو می کند.
LC_COLLATE: ترتیب دسته بندی مورد استفاده در مرتب سازی مقادیر رشته را تنظیم می کند.
LC_CTYPE: تعبیر کاراکترهای مورد استفاده در گسترش نام فایل و تطبیق الگو را تعیین می کند.
LC_MESSAGES: تنظیم محلی مورد استفاده برای تفسیر رشته‌های نقل‌قول‌شده دوبل قبل از علامت دلار را تعریف می‌کند.
LC_NUMERIC: نشان می دهد تنظیمات محلی، برای قالب بندی اعداد استفاده می شود.
LINENO: شماره خط در اسکریپت در حال اجرا.
LINES: تعداد خطوط موجود در ترمینال را تعیین می کند.
MACHTYPE: رشته ای که نوع سیستم را در قالب cpu-company-system تعریف می کند.
چک پستی: پوسته چند وقت یک‌بار باید نامه‌های جدید را بررسی کند (پیش‌فرض 60 ثانیه).
OLDPWD: دایرکتوری کاری قبلی که در پوسته استفاده شده است.
OPTERR: اگر روی 1 تنظیم شود، پوسته bash خطاهای ایجاد شده توسط دستور getopts را نمایش می دهد.
OSTYPE: تعریف رشته سیستم عامل، که در آن پوسته اجرا می شود.
PIPESTATUS: یک آرایه متغیر حاوی لیستی از مقادیر وضعیت خروج از فرآیند فرآیند پیش زمینه.
POSIXLY_CORRECT: اگر تنظیم شود، bash در حالت POSIX اجرا می‌شود.
PPID: شناسه فرآیند (PID) فرآیند پوسته bash والد.
PROMPT_COMMAND: در صورت تنظیم، دستور اجرا قبل از اعلان اولیه نمایش داده می شود.
PS3: از دستور انتخاب استفاده کنید.
PS4: در صورت استفاده، راهنمای ابزار قبل از بازتاب خط فرمان نمایش داده می شود پارامتر bash-ایکس.
PWD: فهرست کار فعلی.
RANDOM: یک عدد تصادفی بین 0 تا 32767 را برمی‌گرداند. با اختصاص یک مقدار به این متغیر، یک مولد اعداد تصادفی ایجاد می‌شود.
پاسخ: متغیر پیش فرض برای دستور خواندن.
SECONDS: تعداد ثانیه هایی که پوسته شروع شده است. تخصیص یک مقدار، تایمر را به مقدار بازنشانی می کند.
SHELLOPTS: فهرستی از گزینه‌های مجاز bash shell جدا شده از دو نقطه.
SHLVL: سطح پوسته را مشخص می کند که هر بار که یک پوسته bash جدید شروع می شود یک عدد افزایش می یابد.
TIMEFORMAT: قالبی که تعیین می کند پوسته چگونه مقادیر زمان را نمایش می دهد.
TMOUT: مقداری برای مدت زمان (بر حسب ثانیه) انتخاب و خواندن دستورات باید منتظر ورودی بماند. مقدار پیش‌فرض صفر به معنای منتظر ماندن نامحدود است.
UID: شناسه کاربری واقعی کاربر فعلی.

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

نتیجه

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

سیستم لینوکس از هر متغیر محیطی جهانی و محلی برای ذخیره اطلاعات در مورد محیط سیستم استفاده می کند. شما می توانید از رابط خط فرمان پوسته و همچنین اسکریپت های پوسته داخلی به این اطلاعات دسترسی داشته باشید. پوسته bash از متغیرهای محیطی سیستم تعریف شده در پوسته اولیه UNO Bourne و همچنین بسیاری از متغیرهای محیط جدید استفاده می کند. متغیر محیطی PATH الگوی جستجویی را تعریف می‌کند که پوسته bash هنگام جستجوی یک فرمان اجرایی می‌پذیرد. شما می توانید متغیر محیطی PATH را تغییر دهید تا دایرکتوری های خود یا شاید نماد دایرکتوری فعلی را اضافه کنید تا کار با برنامه های خود آسان تر شود. شما همچنین می توانید متغیرهای محیط جهانی و محلی خود را برای استفاده خود ایجاد کنید. هنگامی که یک متغیر محیطی ایجاد شد، برای کل جلسه پوسته در دسترس است.

بسیاری از فایل‌های راه‌اندازی وجود دارند که پوسته bash را پس از راه‌اندازی شروع می‌کنند. این فایل‌های راه‌اندازی ممکن است حاوی تعاریف متغیر محیطی برای تنظیم متغیرهای محیط استاندارد برای هر جلسه bash باشند. پس از ورود به سیستم لینوکسپوسته bash به فایل راه اندازی /etc/profile و همچنین به سه فایل دسترسی دارد فایل های محلیراه اندازی برای هر کاربر، $HOME/.bash، $HOME/.bash ورود به سیستم و $HOME/.profile.

کاربران این فایل ها را به گونه ای سفارشی می کنند که شامل متغیرهای محیطی و اسکریپت های راه اندازی برای استفاده خودشان باشد. پوسته bash علاوه بر این، آرایه های متغیر محیطی را فراهم می کند. این متغیرهای محیطی می توانند حاوی چندین مقدار در یک متغیر واحد باشند. شما می توانید با تعیین یک مقدار شاخص یا به طور کلی با تعیین نام آرایه متغیر محیطی کاملا واجد شرایط به مقادیر به صورت جداگانه دسترسی پیدا کنید. در نهایت، در این راهنما باید به استفاده از نام مستعار دستورات اشاره کنیم. اگرچه متغیرهای محیطی نیستند، اما نام مستعار فرمان تقریباً مانند متغیرهای محیطی عمل می کنند. آنها به شما اجازه می دهند که یک نام مستعار برای یک فرمان به همراه پارامترهای آن تعریف کنید. به جای تایپ کردن یک فرمان و پارامترهای بسیار طولانی، می توانید به سادگی یک نام مستعار ساده به آن بدهید و در هر زمانی در جلسه پوسته خود از نام مستعار استفاده کنید.

متغیرهای محیط لینوکس، همراه با متغیرهای پوسته، چیزی هستند که تنظیمات را در یک جلسه کاربر تعیین می کنند.

آنها به طور خودکار بارگیری می شوند، اما می توان آنها را نادیده گرفت. هر بار که وارد سیستم می شوید محیط ایجاد می شود.

متغیرهای محیط لینوکس، متغیرهای پوسته

متغیرهای محیطیبرای فرآیند پوسته کاربر و تمام فرآیندهای فرزند ایجاد شده در آن استفاده می شود.

متغیرهای پوستهحاوی داده هایی است که وضعیت جلسه جاری را تعیین می کند. به عنوان مثال، دایرکتوری فعلی.

هر جلسه از متغیرهای محیطی و متغیرهای پوسته استفاده می کند.

لیست متغیرهای محیط را می توان با اجرا مشاهده کرد printenvیا env

……
LC_MEASUREMENT=ru_RU.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_PAPER=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LANG=en_US.UTF-8
……

تفاوت این است که printenvبه شما امکان می دهد داده ها را برای یک متغیر خاص نمایش دهید - به عنوان مثال:

مزیت env این است که امکان ارسال یک متغیر به یک دستور خاص را فراهم می کند

مثلا:

env SHELL=»/bin/bash» ls -la /opt

مشاهده متغیرهای محیطی

BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
……

خروجی را می توان به آن هدایت کرد کمترتا جهت یابی آسان تر شود

برای خلاص شدن از شر اطلاعات غیر ضروری در خروجی بدون تغییر محیط فعلی، می توانید این کار را انجام دهید:

در حالت POSIX، توابع تعریف شده bash چاپ نمی شوند

متغییرهای پرکاربرد:
  • پوسته- پوسته ای که دستورات را تفسیر می کند
  • کاربر- کاربر
  • P.W.D.- پوشه کنونی
  • مدت، اصطلاح- نوع پایانه ای که شبیه سازی می شود

دستورات شل به شما امکان می دهد مقدار متغیرها را تغییر دهید. بنابراین pwd دایرکتوری فعلی را به کنسول نمایش می دهد

/home/admin

این یک متغیر پوسته PWD است

admin@desktop:~$ مجموعه | grep PWD

OLDPWD=/tmp
PWD=/home/admin

بیایید به /tmp برویم و ببینیم مقدار چگونه تغییر می کند

admin@desktop:~$ سی دی /tmp/

admin@desktop:/tmp$ مجموعه | grep PWD

OLDPWD=/home/admin
PWD=/tmp

می بینید که وقتی دایرکتوری را تغییر می دهید، مقدار متغیر پوسته PWD به سادگی تغییر می کند، و OLDPWD

نحوه تنظیم یک محیط یا متغیر پوسته

متغیر shell به این صورت اضافه می شود

SOMEVAR="سلام"

در خروجی env نخواهد بود، زیرا یک متغیر پوسته است، نه یک متغیر محیطی.

با افزودن علامت $ قبل از نام می توانید محتویات را از طریق اکو مشاهده کنید

سلام

برای افزودن یک متغیر به محیط، باید آن را صادر کنید

صادرات SOMEVAR=”سلام”

SOMEVAR=سلام

پس از این، مقدار توسط فرآیندهای فرزند به ارث می رسد.

می توانید با استفاده از همان فرمان صادراتی با کلید، یک متغیر محیطی را حذف کنید -n

مقدار از پوسته تنظیم نشده حذف می شود

بارگذاری خودکار متغیرها هنگام ورود به سیستم

سیستم های لینوکس از فایل ها استفاده می کنند ~/.bashrc, ~/.bash_profile, ~/.bash_loginیا ~/.پروفایلبرای تعریف متغیرها فایل ها در حین ورود خوانده می شوند که از کدام یک استفاده می شود بستگی به توزیع دارد.

در Ubuntu/Debain این ~/.bashrc است. هم متغیرهای محیطی و هم متغیرهای پوسته را اضافه می کند.

اولین مورد خوانده می شود /etc/profile. مشخص می‌کند و می‌توان آن‌ها را نادیده گرفت که از کدام فایل‌ها و به چه ترتیبی استفاده شود.

برای یک جلسه بدون ورود، متغیرها در /etc/bash.bashrc تنظیم می شوند. این جلسه برای اسکریپت هایی که در پس زمینه اجرا می شوند معمولی است.

برای اکثر وظایف، ویرایش کافی است ~/.bashrc.



 


خواندن:



برهم نهی توابع جبر منطقی توابع بولی یکنواخت

برهم نهی توابع جبر منطقی توابع بولی یکنواخت

تناظر G بین مجموعه های A و B را زیر مجموعه می گویند. اگر، آنگاه می گویند b با a مطابقت دارد. بسیاری از موارد مرتبط ...

سیستم اطلاعاتی چیست؟

سیستم اطلاعاتی چیست؟

پورتال های دولتی، وب سایت های ESIA. سیستم یکپارچه شناسایی و احراز هویت - esia.gosuslugi.ru EPGU. پورتال واحد خدمات عمومی...

انتقال از یک عبارت منطقی به یک مدار منطقی و بالعکس

انتقال از یک عبارت منطقی به یک مدار منطقی و بالعکس

کار آزمایشگاهی شماره 4. اجرای مدار عناصر منطقی ساخت مدارهای منطقی بخش تئوری. پردازش بر اساس ...

خجالت نیژنی نووگورود از پست روسیه

خجالت نیژنی نووگورود از پست روسیه

پس از معرفی سیستم عامل جدید EAS OPS که هزینه آن 890 میلیون روبل بود، زمان خدمات رسانی به مشتریان در دفاتر پست در منطقه...

فید-تصویر RSS