M. Garrels. راهنمای Bash. متغیرها نحوه تنظیم و غیرفعال کردن متغیرهای محیطی محلی، کاربر و سیستم در لینوکس چگونه بفهمیم یک متغیر پوسته کجا نوشته شده است

انواع متغیر

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

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

متغیرهای جهانی یا محیطی در همه پوسته ها موجود هستند. برای نمایش متغیرهای محیطی می توانید از دستورات استفاده کنید envیا printenv. این دستورات به عنوان بخشی از بسته ارائه شده است sh-utils.

در زیر یک خروجی معمولی آمده است:

Franky ~> printenv CC=gcc CDPATH=.:~:/usr/local:/usr:/ CFLAGS=-O2 -fomit-frame-pointer COLORTERM=gnome-terminal CXXFLAGS=-O2 -fomit-frame-pointer DISPLAY=: 0 DOMAIN=hq.garrels.be e= TOR=vi FCEDIT=vi FIGNORE=.o:~ G_BROKEN_FILENAMES=1 GDK_USE_XFT=1 GDMSESSION=Default GNOME_DESKTOP_SESSION_ID=Default GTK_RC_FILES=/etc/gtk/gtkrc:/nethome/franky/.gtkrc -1.2-gnome2 GWMCOLOR=سبز تیره GWMTERM=extterm HISTFILESIZE=5000 history_control=نادیده گرفتن حذف HISTSIZE=2000 HOME=/nethome/franky HOSTNAME=octarine.hq.garrels.be INPUTRCnFrarkky=/etc j2sdk1.4.0 LANG=en_US LDFLAGS=-s LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins LESSCHARSET=latin1 LESS=-edfMQ LESSOPEN=|/usr/bin/lesspipe.f=% LOCAL_MACHINE=octarine LOGNAME=فرانکی LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd= 40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*. com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz= 01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01; 31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31: *.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*. tif=01;35: MACHINES=octarine MAILCHECK=60 MAIL=/var/mail/franky MANPATH=/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man MEAN_MACHINES= octarine MOZ_DIST_BIN=/usr/lib/mozilla MOZILLA_FIVE_HOME=/usr/lib/mozilla MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin MTOOLS_FAT_COMPATIBILITY=1 MYMALLOC=0 NNTPLUNTPGINTHPSX1 4 پلاگین/: / usr/lib/netscape/plugins OLDPWD=/nethome/franky OS=Linux PAGER=کمتر PATH=/nethome/franky/bin.Linux:/nethome/franky/bin:/usr/local/bin:/usr/local/ sbin :/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin:. PS1=\[\033franky در \w\[\033 است PS2=ورودی بیشتر> PWD=/nethome/franky SESSION_MANAGER=local/octarine.hq.garrels.be:/tmp/.ICE-unix/22106 SHELL=/bin /bash shell_login =-login shlvl = 2 ssh_agent_pid = 22161 ssh_askpass =/usr/libexec/openssh/gnome-ssh-askpass ssh_auth_sock =/tmp/ssh-xxmhq4fc/alge franky USER=فرانکی _=/usr/bin/printenv VISUAL=vi WINDOWID=20971661 XAPPLRESDIR=/nethome/franky/app-defaults XAUTHORITY=/nethome/franky/.Xauthority XENVIRONMENT. /X11R6/lib/X11/%L/%T/%N%C%S:/usr/X11R6/lib/X11/%l/%T/%N%C%S:/usr/X11R6/lib/X11 /%T/%N%C%S:/usr/X11R6/lib/X11/%L/%T/%N%S:/usr/X11R6/lib/X11/%l/%T/%N%S :/usr/X11R6/lib/X11/%T/%N%S XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB XMODIFIERS=@im=هیچ XTERMID= XWINHOME=/usr/X11R6 X=X11R6 -YACC= y

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

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

در زیر فایل diff ایجاد شده با مقایسه نتایج دستورات است printenvو تنظیم، پس از حذف از لیست توابعی که توسط دستور نیز نمایش داده می شوند تنظیم:

Franky ~> diff set.sorted printenv.sorted | گرپ "<" | awk "{ print $2 }" BASE=/nethome/franky/.Shell/hq.garrels.be/octarine.aliases BASH=/bin/bash BASH_VERSINFO=(="2" BASH_VERSION="2.05b.0(1)-release" COLUMNS=80 DIRSTACK=() DO_FORTUNE= EUID=504 GROUPS=() HERE=/home/franky HISTFILE=/nethome/franky/.bash_history HOSTTYPE=i686 IFS=$" LINES=24 MACHTYPE=i686-pc-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PIPESTATUS=(="0") PPID=10099 PS4="+ PWD_REAL="pwd SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor THERE=/home/franky UID=504

تقسیم متغیرها بر محتوای آنها

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

  • متغیرهای رشته ای
  • متغیرهای عدد صحیح
  • متغیرها - ثابت ها
  • متغیرها - آرایه ها

این نوع متغیرها را در فصل 10 مورد بحث قرار خواهیم داد. اکنون از مقادیر عدد صحیح و رشته در متغیرهای خود استفاده خواهیم کرد.

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

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

Prompt> export 1number=1 bash: export: `1number=1": یک شناسه معتبر نیست

برای تنظیم یک متغیر در پوسته فرمان، از دستور زیر استفاده کنید

VARNAME="value"

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

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

Franky ~> MYVAR1="2" franky ~> echo $MYVAR1 2 franky ~> first_name="Franky" franky ~> echo $first_name Franky franky ~> full_name="Franky M. Singh" franky ~> echo $full_name Franky M. سینگ فرانکی ~> MYVAR-2="2" bash: MYVAR-2=2: فرمان آشکار نشد ~> MYVAR1 ="2" bash: MYVAR1: فرمان آشکار نشد ~> MYVAR1 = "2" bash: 2: فرمان یافت نشد صریح ~> تنظیم نشده MYVAR1 first_name full_name صادقانه ~> echo $MYVAR1 $first_name $full_name<--no output-->صریح ~>

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

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

صادرات VARNAME="value"

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

Franky ~> full_name="Franky M. Singh" franky ~> bash franky ~> echo $full_name franky ~> exit franky ~> export full_name franky ~> bash franky ~> echo $full_name Franky M. Singh franky ~> export full_name= "Charles the Great" franky ~> echo $full_name Charles the Great franky ~> exit franky ~> echo $full_name Franky M. Singh franky ~>

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

متغیرهای رزرو شده

متغیرهای پوسته رزرو شده بورن

Bash از متغیرهای پوسته خاصی مانند پوسته Bourne استفاده می کند. در برخی موارد، Bash به یک متغیر مقدار پیش فرض آن را اختصاص می دهد. جدول زیر نشان می دهد توضیح کوتاهاین متغیرهای ساده پوسته:

جدول 3.1. متغیرهای پوسته رزرو شده بورن

نام متغیر تعریف

فهرست دایرکتوری ها که با دو نقطه از هم جدا شده اند و هنگام جستجوی مسیر با استفاده از دستور داخلی استفاده می شوند سی دی.

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

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

اگر این پارامتر روی نام فایل تنظیم شود و MAILPATH تنظیم نشده باشد، Bash به کاربر اطلاع می دهد که نامه در فایل مشخص شده دریافت شده است.

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

مقدار آخرین آرگومان در پارامتر پردازش شده توسط دستورbuildin می گیرد.

ایندکس آخرین آرگومان پارامتر پردازش شده توسط دستورbuildin می گیرد.

فهرستی از دایرکتوری‌های جدا شده با کولون که در آن پوسته به دنبال دستورات می‌گردد.

خط اعلان اولیه مقدار پیش فرض ""\s-\v\$ " است.

خط سریع ثانویه مقدار پیش فرض ""> "" است.

متغیرهای رزرو شده Bash

مقادیر این متغیرها در Bash تنظیم یا استفاده می‌شوند، اما معمولاً در پوسته‌های دیگر به‌عنوان خاص رفتار نمی‌شوند.

جدول 3.2. متغیرهای رزرو شده Bash

نام متغیر تعریف

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

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

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

شماره نسخه نمونه فعلی Bash.

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

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

یک اشاره گر در $(COMP_WORDS) به کلمه ای که موقعیت مکان نما فعلی را ذخیره می کند.

خط فرمان فعلی

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

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

متغیر آرایه ای است که Bash از آن می خواند گزینه های ممکنتکمیل‌های رشته‌ای تولید شده توسط یک تابع پوسته که توسط یک سرویس طراحی شده برای تکمیل برنامه‌نویسی نامیده می‌شود

متغیر آرایه ای است که وضعیت فعلی پشته دایرکتوری را ذخیره می کند.

شناسه کاربر موثر عددی شناسه کاربر فعلی.

ویرایشگر پیش‌فرض که در یک فرمان داخلی استفاده می‌شود fcپارامتر -e مشخص شده است

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

نام تابع پوسته در حال اجرا.

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

متغیر آرایه ای است حاوی لیستی از گروه هایی که کاربر فعلی به آنها تعلق دارد.

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

شماره دستور فعلی در تاریخچه فرمان یا نمایه آن در لیست تاریخچه فرمان.

تعیین می کند که آیا دستور به فایل تاریخچه فرمان اضافه می شود یا خیر.

نام فایلی که تاریخچه فرمان در آن ذخیره شده است. مقدار پیش‌فرض: ~/.bash_history.

حداکثر تعداد خطوط پیش فرض موجود در فایل تاریخچه فرمان 500 است.

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

حداکثر تعداد پیش‌فرض فرمان‌هایی که می‌توان در فهرست تاریخچه فرمان‌ها ذخیره کرد 500 است.

حاوی نام فایلی با همان فرمت فایل /etc/hosts است که زمانی که پوسته فرمان نیاز به تکمیل نام میزبان داشته باشد، قابل خواندن است.

نام میزبان فعلی

رشته ای که ماشینی را که Bash روی آن کار می کند توصیف می کند.

وقتی پوسته یک کاراکتر را به عنوان کاراکتر پایانی جریان ورودی دریافت می کند، چه کاری انجام می دهد EOF(نماد پایان فایل).

نام فایل مقداردهی اولیه برنامه Readline که جایگزین فایل پیش فرض /etc/inputrc می شود.

برای تعریف رده محلی برای همه دسته‌ها استفاده می‌شود که به صراحت توسط متغیرهایی که نام آنها با کاراکترهای LC_ شروع می‌شود مشخص نشده‌اند.

این متغیر مقدار متغیر LANG و همه متغیرهای دیگری را که با کاراکترهای LC_ شروع می‌شوند که دسته محلی‌سازی را مشخص می‌کنند، لغو می‌کند.

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

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

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

این متغیر دسته محلی سازی را برای قالب شماره مشخص می کند.

شماره خط در اسکریپت یا تابع پوسته که در حال حاضر اجرا می شود.

توسط دستور داخلی استفاده می شود انتخاب کنیدبرای تعیین طول ستونی که لیست های انتخاب شده در آن نمایش داده می شوند.

رشته ای که به طور کامل نوع سیستمی را که Bash روی آن اجرا می شود، با استفاده از فرمت استاندارد GNU CPU-COMPANY-SYSTEM توصیف می کند.

در عرض چند ثانیه مشخص می‌کند که پوسته چند وقت یک‌بار باید نامه‌ها را در فایل‌های مشخص‌شده در متغیرهای MAILPATH یا MAIL بررسی کند.

مجموعه دایرکتوری کاری قبلی با استفاده از دستور داخلی سی دی.

اگر روی 1 تنظیم شود، Bash پیام های خطای ایجاد شده توسط دستور داخلی را نمایش می دهد می گیرد.

رشته توصیف می کند سیستم عامل، که Bash را اجرا می کند.

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

اگر این متغیر هنگام شروع bash به محیط اضافه شود، پوسته به حالت POSIX می رود.

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

مقدار این متغیر برای دستور استفاده می شود انتخاب کنیدبه عنوان یک رشته سریع پیش فرض - ""#؟ ""

مقدار رشته prompt که قبل از خط فرمان صادر می شود وقتی که گزینه -x برای فعال کردن پژواک تنظیم می شود خط فرمان; پیش فرض ""+ "" است.

دایرکتوری کاری فعلی با دستور داخلی تنظیم شده است سی دی.

با هر بار دسترسی به این پارامتر، یک عدد صحیح تصادفی در محدوده 0 تا 32767 تولید می شود. مقدار این متغیر در مولدهای اعداد تصادفی استفاده می شود.

متغیر پیش فرض در دستور داخلی خواندن.

این متغیر تعداد ثانیه هایی را که از راه اندازی پوسته فرمان می گذرد را نشان می دهد.

لیست پارامترهای تنظیم شده در پوسته فرمان؛ با کولون از هم جدا شده اند.

هر بار که نمونه جدیدی از Bash شروع می شود یک عدد افزایش می یابد.

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

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

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

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

پارامترهای خاص

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

جدول 3.3. متغیرهای ویژه Bash

سمبل تعریف

پارامترهای موقعیتی را که از اولی شروع می شود، برمی گرداند. هنگامی که یک پارامتر در دو گیومه مشخص می شود، با یک کلمه حاوی مقادیر هر پارامتر جایگزین می شود که با اولین کاراکتر متغیر ویژه IFS از هم جدا می شود.

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

تعداد پارامترهای موقعیتی مشخص شده به عنوان یک مقدار اعشاری را برمی‌گرداند.

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

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

شناسه فرآیند پوسته را برمی‌گرداند.

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

نام پوسته یا اسکریپت را برمی‌گرداند.

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

پارامترهای موقعیتی کلماتی هستند که در زیر نام اسکریپت پوسته قرار دارند. آنها در متغیرهای $1، $2، $3 و غیره ذخیره می شوند. در صورت نیاز متغیرها به آرایه داخلی اضافه می شوند. متغیر $# تعداد کل پارامترها را مشخص می کند، همانطور که در اسکریپت ساده زیر نشان داده شده است:

# positional.sh # این اسکریپت 3 پارامتر موقعیتی را می خواند و آنها را چاپ می کند. POSPAR1="$1" POSPAR2="$2" POSPAR3="$3" echo "$1 اولین پارامتر موقعیتی است، \$1." echo "$2 دومین پارامتر موقعیتی است، \$2." echo "$3 سومین پارامتر موقعیتی است، \$3." echo echo "تعداد کل پارامترهای موقعیتی $# است."

هنگام اجرای اسکریپت، می توانید هر تعداد آرگومان را مشخص کنید:

Franky ~> positional.sh یک دو سه چهار پنج یک اولین پارامتر موقعیتی است، $1. دو دومین پارامتر موقعیتی است، $2. سه سومین پارامتر موقعیتی است، $3. تعداد کل پارامترهای موقعیتی 5 است. franky ~> positional.sh one two one اولین پارامتر موقعیتی است، $1. دو دومین پارامتر موقعیتی است، $2. سومین پارامتر موقعیتی، $3 است. تعداد کل پارامترهای موقعیتی 2 است.

برای اطلاعات بیشتر در مورد استفاده از این پارامترها، به فصل 7، بیانیه های شرطی و بخش مربوط به دستور داخلی shift مراجعه کنید.

چند نمونه از پارامترهای خاص دیگر:

Franky ~> دیکشنری grep /usr/share/dict/words دیکشنری franky ~> echo $_ /usr/share/dict/words franky ~> echo $$ 10662 franky ~> mozilla & 11064 franky ~> echo $! 11064 franky ~> echo $0 bash franky ~> echo $? 0 franky ~> ls does nototexist ls: does nototexist: چنین فایل یا دایرکتوری وجود ندارد ~> echo $؟ 1 صریح ~>

کاربر صریحبا وارد کردن دستور شروع می شود grep، که مقدار را به متغیر _ اختصاص می دهد. شناسه فرآیند این پوسته 10662 است. اگر اجرای برخی کارها به حالت پس زمینه، در یک متغیر! یک شناسه فرآیند وجود خواهد داشت شغل پس زمینه. یک پوسته دستور کار است ضربه شدید. اگر خطایی رخ داده است، در متغیر؟ یک کد بازگشتی متفاوت از 0 (صفر) وجود خواهد داشت.

گسترش دامنه کاربرد اسکریپت هایی که دارای متغیر هستند

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

#!/bin/bash # این اسکریپت از فهرست اصلی من یک نسخه پشتیبان تهیه می کند. cd /home # این آرشیو tar را ایجاد می کند. cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # ابتدا فایل bzip2 قدیمی را حذف کنید. خطاها را تغییر مسیر دهید زیرا اگر آرشیو # وجود نداشته باشد، مقداری ایجاد می کند. سپس یک فایل فشرده جدید ایجاد کنید. rm /var/tmp/home_franky.tar.bz2 2> /dev/null bzip2 /var/tmp/home_franky.tar # فایل را به میزبان دیگری کپی کنید - ما کلیدهای ssh برای ساخت این کار بدون دخالت داریم. scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1 # یک مهر زمانی در یک logfile ایجاد کنید. date >> /home/franky/log/home_backup.log پشتیبان گیری اکو با موفقیت انجام شد >> /home/franky/log/home_backup.log

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

#!/bin/bash # این اسکریپت از فهرست اصلی من یک نسخه پشتیبان تهیه می کند. # مقادیر متغیرها را تغییر دهید تا اسکریپت برای شما کار کند: BACKUPDIR=/home BACKUPFILES=franky TARFILE=/var/tmp/home_franky.tar BZIPFILE=/var/tmp/home_franky.tar.bz2 SERVER=bordeaux REMOTEDIR =/ opt/backup/franky LOGFILE=/home/franky/log/home_backup.log سی دی $BACKUPDIR # این بایگانی tar cf $TARFILE $BACKUPFILES > /dev/null 2>&1 # ابتدا فایل bzip2 قدیمی را حذف کنید. خطاها را تغییر مسیر دهید زیرا اگر آرشیو # وجود نداشته باشد، مقداری ایجاد می کند. سپس یک فایل فشرده جدید ایجاد کنید. rm $BZIPFILE 2> /dev/null bzip2 $TARFILE # فایل را در یک میزبان دیگر کپی کنید - ما کلیدهای ssh برای انجام این کار بدون دخالت داریم. scp $BZIPFILE $SERVER:$REMOTEDIR > /dev/null 2>&1 # یک مهر زمانی در یک فایل گزارش ایجاد کنید. تاریخ >> $LOGFILE echo پشتیبان گیری انجام شد >> $LOGFILE

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

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

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

نحوه عملکرد محیط و متغیرهای آن

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

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

محیط به شکل رشته ای حاوی جفت های کلید-مقدار است. مقادیر چندگانه معمولاً با یک کولون (:) از هم جدا می شوند. هر جفت به طور کلی چیزی شبیه به این است:

KEY=value1:value2:...

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

KEY = مقدار با فاصله

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

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

متغیرهای پوستهمتغیرهایی هستند که منحصراً در پوسته ای که در آن تنظیم یا تعریف شده اند وجود دارند. آنها اغلب برای پیگیری داده های جاری (به عنوان مثال، دایرکتوری فعلی کار) استفاده می شوند.

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

چاپ متغیرهای پوسته و محیط

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

برای مشاهده لیستی از همه متغیرهای محیطی، از دستورات env یا printenv استفاده کنید. به طور پیش فرض آنها دقیقاً همان نتیجه را ارائه می دهند:

printenv
SHELL=/bin/bash
TERM=xterm
USER=demouser
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd= 40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demouser
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/demouser
LOGNAME=demouser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

این یک مثال معمولی از خروجی دستورات printenv و env است. این دستورات فقط در چند توابع جداگانه متفاوت هستند. به عنوان مثال، printenv می تواند مقادیر متغیرهای فردی را پرس و جو کند:

printenv SHELL
/bin/bash

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

env VAR1="blahblah" command_to_run command_options

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

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

اما متغیرهای پوسته را چگونه می بینید؟

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

تنظیم
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .

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

این لیست شامل تعداد زیادی است اطلاعات اضافی، که در این لحظهمورد نیاز نیست (به عنوان مثال، برخی از توابع bash).

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

(مجموعه -o posix؛ مجموعه)

این عمل تمام متغیرهای محیط و پوسته را نمایش می دهد.

همچنین می توانید این خروجی را با خروجی دستورات env/printenv مقایسه کنید و سعی کنید فقط متغیرهای پوسته را فهرست کنید، اما چنین لیستی ایده آل نخواهد بود زیرا خروجی این دستورات متفاوت است:

کام -23<(set -o posix; set | sort) <(env | sort)

این لیست احتمالاً شامل چندین متغیر محیطی خواهد بود زیرا دستور set مقادیر را در گیومه چاپ می کند، اما دستورات printenv و env اینگونه نیستند.

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

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

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

برخی از متغیرهای محیطی و پوسته بسیار مفید اغلب استفاده می شوند.

در زیر لیستی از متغیرهای محیطی اصلی آمده است:

  • پوسته: پوسته ای را توصیف می کند که دستورات وارد شده را تفسیر می کند. در بیشتر موارد، bash به طور پیش فرض نصب می شود، اما در صورت لزوم می توان این مقدار را تغییر داد.
  • مدت، اصطلاح: نوع ترمینال شبیه سازی شده هنگام راه اندازی پوسته را مشخص می کند. بسته به نیازهای عملیاتی، پایانه های سخت افزاری مختلفی را می توان شبیه سازی کرد. معمولاً لازم نیست در این مورد نگران باشید.
  • کاربر: کاربر فعلی.
  • P.W.D.: فهرست کار فعلی.
  • OLDPWD: پوشه کاری قبلی در صورتی که دستور cd - اجرا شود، پوسته آن را ذخیره می کند.
  • LS_رنگ ها: کدهای رنگی را که برای رنگ آمیزی خروجی دستور ls استفاده می شود را تعریف می کند. این خروجی به کاربر کمک می کند تا نتیجه فرمان را سریعتر بخواند (مثلاً به سرعت بین انواع فایل ها تمایز قائل شود).
  • پست الکترونیکی: مسیر به صندوق پست فعلی کاربر.
  • مسیر: لیستی از دایرکتوری هایی که سیستم هنگام اجرای دستورات به آنها دسترسی دارد. هنگامی که کاربر دستور را اجرا می کند، سیستم این دایرکتوری ها را به ترتیب مشخص شده برای فایل اجرایی بررسی می کند.
  • LANG: زبان فعلی و تنظیمات محلی سازی، از جمله رمزگذاری کاراکتر.
  • HOME: فهرست اصلی کاربر فعلی.
  • _ : آخرین دستور اجرا شده

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

  • BASHOPTS: لیست گزینه های مورد استفاده در هنگام اجرای bash. این می تواند برای بررسی اینکه آیا محیط مطابق انتظار کار می کند یا خیر استفاده می شود.
  • ضربه شدید_VERSION: نسخه در حال اجرا bash به شکل قابل خواندن توسط انسان.
  • ضربه شدید_VERSINFO: نسخه قابل خواندن توسط ماشین bash.
  • ستون ها: عرض خروجی را در ستون ها مشخص می کند.
  • DIRSTACK: مجموعه ای از دایرکتوری های قابل دسترسی به دستورهای pushd و popd.
  • HISTFILESIZE: حداکثر تعداد خطوط موجود در فایل تاریخچه فرمان.
  • HISTSIZE: تعداد دستوراتی که باید در لیست تاریخچه به خاطر بسپارید.
  • HOSTNAME: نام میزبان فعلی.
  • IFS:جداکننده فیلد ورودی داخلی در خط فرمان. پیش فرض فضا است.
  • PS1: خط فرمان اولیه را تعریف می کند - نوع خط فرمان هنگام شروع یک جلسه پوسته. متغیر PS2 خط فرمان ثانویه را تنظیم می کند اگر فرمان چندین خط را در بر گیرد.
  • SHELLOPTS: گزینه های پوسته ای که می توانند با استفاده از set تنظیم شوند.
  • UID: شناسه منحصر به فرد برای کاربر فعلی.

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

در زیر چند مثال برای نشان دادن تفاوت بین متغیرهای پوسته و محیط و توضیح نحو برای تنظیم این متغیرها آورده شده است.

ایجاد متغیرهای پوسته

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

TEST_VAR="سلام دنیا!"

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

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

برای تأیید این موضوع، از دستور grep در نتیجه دستور set استفاده کنید:

مجموعه | grep TEST_VAR
TEST_VAR="سلام دنیا!"

همچنین می توانید با اجرای grep روی نتیجه دستور printenv مطمئن شوید که این متغیر یک متغیر محیطی نیست:

printenv | grep TEST_VAR

این اقدام هیچ نتیجه ای نخواهد داشت.

این می تواند برای نشان دادن مقدار هر متغیر پوسته یا محیطی استفاده شود.

پژواک $TEST_VAR
سلام دنیا!

همانطور که می بینید، برای دسترسی به مقدار یک متغیر، باید از نماد $ استفاده کنید.

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

ضربه شدید
پژواک $TEST_VAR

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

برای بازگشت به پوسته اصلی خود، exit را تایپ کنید:

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

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

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

printenv | grep TEST_VAR
TEST_VAR=سلام دنیا!

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

ضربه شدید
پژواک $TEST_VAR
سلام دنیا!

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

export NEW_VAR="آزمایش صادرات"

بررسی کنید که آیا متغیر صادر شده است:

printenv | grep NEW_VAR
NEW_VAR=تست صادرات

اکنون به پوسته اصلی خود بازگردید:

بررسی کنید که آیا این متغیر می تواند باز شود:

نتیجه برگردانده نمی شود

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

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

جابجایی و تنظیم مجدد متغیرها

متغیر TEST_VAR همچنان یک متغیر محیطی است. برای تبدیل مجدد آن به یک متغیر پوسته، تایپ کنید:

صادرات -n TEST_VAR

حالا این متغیر دیگر یک متغیر محیطی نیست:

printenv | grep TEST_VAR

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

مجموعه | grep TEST_VAR
TEST_VAR="سلام دنیا!"

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

مطمئن شوید که چنین متغیری دیگر وجود ندارد:

هیچ نتیجه ای چاپ نشد زیرا متغیر بازنشانی شد.

تنظیم خودکار متغیرهای محیطی

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

این کمی پیچیده تر از آن چیزی است که در ابتدا به نظر می رسد، زیرا پوسته bash فایل های پیکربندی زیادی را می خواند.

انواع جلسات شل

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

استارتر یا پوسته اولیه(پوسته ورود به سیستم) یک جلسه پوسته است که پس از مجوز کاربر باز می شود. اگر کاربر به ترمینال وارد شود یا با استفاده از SSH احراز هویت کند، پوسته راه اندازی باز می شود.

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

همچنین، جلسات پوسته می توانند تعاملی یا غیر تعاملی باشند.

جلسه تعاملیپوسته (پوسته تعاملی) جلسه ای است که به یک ترمینال گره خورده است. جلسه پوسته غیر تعاملی جلسه ای است که با یک ترمینال مرتبط نیست.

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

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

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

بنابراین، ابتدا جلسه راه اندازی تنظیمات را از فایل /etc/profile دریافت می کند. سپس به دنبال فایل پیکربندی پوسته راه اندازی در فهرست اصلی کاربر می گردد تا تنظیمات تعریف شده توسط کاربر را بدست آورد.

این جلسه فایل های ~/.bash_profile، ~/.bash_login و ~/.profile را می خواند و فایل های دیگر را نمی خواند.

جلسه فرزند به نوبه خود فایل /etc/baash.bashrc و سپس فایل ~/.bash.rc کاربر را برای استقرار محیط می خواند.

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

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

همانطور که می بینید، تنظیمات در فایل های مختلف پراکنده شده اند.

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

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

به طور معمول، هر دو پوسته از متغیرهای محیطی تعریف شده توسط کاربر استفاده می کنند. یعنی می توانید این متغیرها را در فایل ~/.bashrc تنظیم کنید.

این فایل را باز کنید:

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

صادرات VARNAME=مقدار

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

منبع ~/.bashrc

برای تنظیم متغیرهای کل سیستم، آنها را به /etc/profile، /etc/bash.bashrc یا /etc/environment اضافه کنید.

نتایج

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

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

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

برچسب ها: ,

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

به عنوان مثال، دستور 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

2.2. متغیرهای محیطی

سیستم عامل از نوع خاصی از منبع به نام پشتیبانی می کند متغیرهای محیطی (متغیرهای محیطی). این متغیرها یک جفت هستند NAME - VALUE . نام می تواند با یک حرف شروع شود و شامل حروف، اعداد و زیرخط باشد.

برای جایگزینی مقدار یک متغیر در خط فرمان، قبل از نام متغیر با علامت $ قرار دهید:

$ echo $USER مهمان

اگر متغیر تنظیم نشده باشد، یک رشته خالی برگردانده می شود.

برای تنظیم مقدار یک متغیر، از عملگر انتساب (در مورد پوسته های Bourne مانند) استفاده کنید:

$TEST=تست

یا عملگر مجموعه داخلی (در مورد موارد مشابه C):

مجموعه $ TEST=test

دستور set، بدون آرگومان، مقادیر تمام متغیرهای تنظیم شده در محیط را فهرست می کند:

مجموعه $ COLUMNS=197 CVS_RSH=ssh DIRSTACK=() EUID=1000 GROUPS=() G_BROKEN_FILENAMES=1 HISTFILE=/home/guest/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HISTSIZE=1000 HISTSIZE=10000HISTSIZE=10000HISTSIZE=10000HISTSIZE=10000HISTSIZE=10000HISTSIZE=10000HISTSIZE=10000HISTSIZE=10000HISTHOMESTGUEST IFS =$" \t\n" INPUTRC=/etc/inputrc KDEDIR=/usr KDEDIRS=/home/guest/.local/ KDE_IS_PRELINKED=1 KDE_NO_IPV6=1 LANG=ru_RU.UTF-8 LESSOPEN="|/usr/bin/ lesspipe.sh %s" LINES=65 LOGNAME=مهمان ....

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

$ TEST=test1 sh -c "echo $TEST" test1

شما می توانید محتویات مجموعه ای از متغیرها را برای یک جلسه با فراخوانی دستور داخلی مفسر env در مورد مفسرهای Bourne مانند (sh, ksh, bash, zsh, pdksh...) و printenv در case را ارزیابی کنید. مفسرهای کلون C-Shell (csh، tcsh. ..):

$ env HOSTNAME=myhost TERM=xterm SHELL=/bin/bash HISTSIZE=1000 KDE_NO_IPV6=1 SSH_CLIENT=172.16.0.9 50487 22 QTDIR=/usr/lib/qt-3.3 QTINCQ=/tclude/usr. =/dev/pts/6 USER=مهمان MOZILLA_CERTIFICATE_FOLDER=/home/guest/.evolution/ KDEDIR=/usr MAIL=/var/spool/mail/guest PATH=/usr/games:/usr/local/bin:/bin :/usr/bin:/home/guest/bin INPUTRC=/etc/inputrc PWD=/home/guest KDE_IS_PRELINKED=1 LANG=ru_RU.UTF-8 KDEDIRS=/home/guest/.local/ SSH_ASKPASS=/usr/libexec /openssh/gnome-ssh-askpass SHLVL=1 HOME=/home/guest LOGNAME=میهمان QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 129.2OP=EN. /bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

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

#!/bin/sh متغیر echo TEST: echo $TEST

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

$sh تست متغیر TEST:

می توانید با استفاده از عبارت export (Bourne) یا setenv (C-SHell) یک متغیر جهانی بسازید:

$ export TEST=test1 $ sh تست متغیر TEST: test1

شما می توانید مقادیر محلی متغیرها را برای اجرای یک برنامه مشخص با فراخوانی دستورات قبل از آنها تنظیم کنید:

$ TEST=test2 sh test متغیر TEST: test2

حذف متغیرهای محیطی با استفاده از دستور unset انجام می شود.

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

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

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

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

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

5.6.6 تیم صادرات

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

$name=value

باید آن را یادداشت کنید

$export name=value

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

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