خاکستر - Linux Command - فرمان یونیکس

نام

ش - فرمانده مترجم ( پوسته )

خلاصه

sh [- / + aCefnuvxIimqsVEbc ] [- longname ] -words [ هدف ... ]

شرح

ش استاندارد کننده تفسیر دستور برای سیستم است. نسخه فعلی sh در حال تغییر در سازگاری با مشخصات POSIX 1003.2 و 1003.2a برای پوسته است. این نسخه دارای ویژگی های بسیاری است که در بعضی موارد به پوسته کورن مشابه می شود، اما این یک کلون پوسته کورن نیست (به ksh (1) مراجعه کنید). فقط ویژگی های تعیین شده توسط POSIX به همراه چند پسوند برکلی، به این پوسته افزوده می شود. انتظار داریم تا زمان بروز رسانی POSIX 4.4 توسط BSD منتشر شود. این صفحه شخصی به عنوان یک آموزش یا یک مشخصه کامل پوسته در نظر گرفته نشده است.

بررسی اجمالی

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

فراخوان

اگر هیچ آرگومان وجود نداشته باشد و اگر ورودی استاندارد پوسته به ترمینال متصل باشد (یا اگر پرچم من تنظیم شده باشد) و گزینه - c موجود نیست، پوسته پوسته تعاملی در نظر گرفته شده است . یک پوسته تعاملی به طور کلی قبل از هر فرمان پیش می آید و خطاهای برنامه نویسی و دستورالعمل را به صورت متفاوتی کنترل می کند (همانطور که در زیر توضیح داده شده است). وقتی ابتدا شروع می شود، پوسته، استدلال 0 را بازبینی می کند، و اگر با یک خط تیره شروع شود، پوسته نیز پوسته ی ورودی در نظر گرفته می شود. این معمولا به صورت خودکار توسط سیستم انجام می شود زمانی که کاربر برای اولین بار وارد سیستم می شود. پوسته ورود اولین بار دستورات از فایل ها / etc / profile و .profile را در صورت وجود دارد. اگر متغیر محیطی ENV در ورود به پوسته تنظیم شده باشد یا در پروفایل پرونده پوسته ورودی تنظیم شده باشد، پوسته بعد دستورات را از پرونده ای که در ENV خوانده می شود، خوانده می شود بنابراین کاربر باید دستور هایی را که فقط باید در زمان ورود به فایل پرونده، و دستوراتی که برای هر پوسته داخل فایل ENV اجرا می شوند. برای تنظیم متغیر ENV به برخی از فایل ها، خط زیر را در پرونده خود از دایرکتوری خانگی خود قرار دهید

ENV = $ HOME / .shinit؛ صادرات ENV

جایگزین `` .shinit '' هر نام فایل ای که می خواهید. از آنجا که فایل ENV برای هر فراخوانی پوسته، از جمله اسکریپت های پوسته و پوسته های غیر تعاملی خوانده می شود، پارامتر زیر برای محدود کردن دستورات در پرونده ENV به فراخوانی های تعاملی مفید است. دستورات را در داخل `` case '' و `` esac '' زیر قرار دهید (این دستورات بعدا شرح داده می شود):

case $ - در * i *)

# دستورات فقط برای استفاده تعاملی

...

esac

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

پردازش فهرست Argument

تمام گزینه های یک نامه دارای نام متناظر است که می تواند به عنوان یک استدلال به گزینه - o استفاده شود. نام مجموعه - o در کنار گزینه ی تک نامه در توضیحات زیر ارائه شده است. مشخص کردن یک ترس `` - '' گزینه را روشن می کند، در حالی که با استفاده از plus `` + 'گزینه را غیرفعال می کند. گزینه های زیر را می توان از خط فرمان یا با مجموعه (1) builtin (که بعدا شرح داده شده است) تنظیم می کند.

allexport

صادرات تمام متغیرهای اختصاص داده شده به. (برای 4.4alpha به طور غیرقانونی)

-c

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

-C noclobber

فایلهای موجود را با استفاده از ``> '' بازنویسی نکنید (برای 4.4alpha غیرمجاز)

errexit

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

-ف نولوب

غیر فعال کردن گسترش پهنای باند

-n noexec

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

-n عنوان

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

-و واضح

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

-x xtrace

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

-Q quietprofile

اگر گزینه های - v یا - x تنظیم شده باشند، آنها را در هنگام خواندن فایل های اولیه سازی، این / etc / profile .profile و فایل مشخص شده توسط متغیر محیط ENV اعمال نکنید.

من نادیده گرفتم

هنگام تعاملی، EOF را از ورودی نادیده بگیرید.

-I تعاملی

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

مانیتور -M

کنترل کار را روشن کنید (زمانی که تعاملی به صورت خودکار تنظیم شود).

-s stdin

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

-V وی

فعالسازی ساخته شده در vi (1) ویرایشگر خط فرمان (غیرفعال - E اگر تنظیم شده باشد).

-E emacs

emacs ساخته شده (1) ویرایشگر خط فرمان را فعال کنید (غیر فعال می شود - V اگر تنظیم شده باشد).

-b اطلاع بده

اطلاع رسانی ناهمزمان از اتمام کار پس زمینه را فعال کنید. (برای 4.4alpha به طور غیرقانونی)

ساختار لکسی

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

"اپراتورهای کنترل:"

&&& ()؛ ؛؛ | ||

"عملیات تغییر مسیر:"

<>> | << >> <&> & << - <>

نقل قول

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

بکسلش

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

نقل قول های تک

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

نقل قول های دوگانه

کاراکترهای محصور در داخل نقل قول های دوگانه، معنای لفظی همه کاراکترها را حفظ می کند، به جز دلار ($) backquote (`) و backslash (\) بکلیش در داخل نقل قول های دوگانه از لحاظ تاریخی عجیب و غریب است و فقط نقل قول کاراکترهای زیر است:

$ `\

در غیر این صورت باقی می ماند.

واژه های رزرو شده

کلمات ذخیره شده عبارت هستند از کلمات که معنی خاصی برای پوسته دارند و در ابتدای یک خط و بعد از یک اپراتور کنترل شناخته می شوند. کلمات زیر رزرو می شوند:

! Ta elif Ta fi Ta while Ta case

دیگر Ta برای Ta سپس Ta {Ta}

آیا تا زمانی که Ta Esac را انجام دادی، Ta را انجام دادی؟

معنی آنها بعدا مورد بحث قرار می گیرد.

نام مستعار

نام مستعار یک نام و مقدار مربوطه است که با استفاده از نام مستعار (1) ساخته شده است. هر زمان که یک کلمه محدود ممکن است رخ دهد (نگاه کنید به بالا)، و پس از بررسی کلمات رزرو شده، پوسته کلمه را بررسی می کند تا ببینید آیا با نام مستعار مطابقت دارد. اگر این کار را انجام دهد، آن را در جریان ورودی با مقدار آن جایگزین می کند. برای مثال، اگر یک نام مستعار با نام `` LF '' با مقدار `` LS -F '' وجود دارد، سپس ورودی:

LF foobar

تبدیل خواهد شد

ls -F foobar

نام مستعار یک راه مناسب برای کاربران ساده و معصوم فراهم می کند تا shorthands برای دستورات ایجاد بدون نیاز به یادگیری نحوه ایجاد توابع با استدلال. آنها همچنین می توانند برای ایجاد کد لفظی مبهم استفاده شوند. این استفاده دلسرد کننده است.

دستورات

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

دستورات ساده

اگر یک دستور ساده شناخته شده باشد، پوسته اقدامات زیر را انجام می دهد:

  1. کلمات کلیدی فرم '`name = value' 'حذف شده و به محیط زیست دستور ساده اختصاص داده می شوند. اپراتورهای هدایتگر و استدلال های آنها (همانطور که در زیر توضیح داده شده) برای پردازش ذخیره می شوند و ذخیره می شوند.
  2. کلمات باقیمانده به عنوان شرح داده شده در بخش "Expansions" شرح داده شده است و اولین کلمه باقی مانده در نظر گرفته شده است نام فرمان و فرمان واقع شده است. کلمات باقیمانده استدلال های فرمان است. اگر نام فرمان نرسیده باشد، تخصیص متغیر `` name = = value '' شناخته شده در قسمت 1 روی پوسته فعلی تاثیر می گذارد.
  3. تغییر مسیرها در بخش بعدی شرح داده شده است.

تغییر مسیرها

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

[n] فایل redir-op

جایی که redir-op یکی از اپراتورهای تغییر مسیر است که قبلا ذکر شد. در زیر لیستی از تغییر مسیر ممکن است. Bq n یک شماره اختیاری است، همانند '3' (نه `Bq 3 'که به یک توصیفگر فایل اشاره دارد.

[n]> فایل

تغییر مسیر خروجی استاندارد (یا n) را به فایل.

[n]> | فایل

همان، اما گزینه C را لغو می کند.

[n] >> فایل

خروجی استاندارد (یا n) را به فایل اضافه کنید.

[n] <فایل

تغییر مسیر ورودی استاندارد (یا n) از فایل.

[n1] <& n2

ورودی استاندارد (یا n1) را از توصیفگر فایل n2 کپی کنید.

[n] <& -

بستن ورودی استاندارد (یا n).

[n1]> و n2

خروجی استاندارد (یا n1) از n2 را کپی کنید.

[n]> & -

بستن خروجی استاندارد (یا n).

[n] <> فایل

فایل را برای خواندن و نوشتن روی ورودی استاندارد (یا n) باز کنید.

تغییر مسیر زیر اغلب به نام `` اینجا سند ''

[n] << جداکننده

اینجا متن متنی ...

جدا کننده

تمام متن در سطوح پیوسته تا جداکننده ناپدید می شود و در فرمان ورودی استاندارد و یا توصیفگر فایل n در صورت مشخص مشخص می شود. اگر تعریف شده در خط اولیه ذکر شده است، در اینجا متن doc-text به معنای واقعی کلمه در نظر گرفته می شود، در غیر این صورت متن به گسترش پارامتر، جایگزینی فرمان و گسترش محاسباتی (همانطور که در بخش «گسترش» آمده است) است. 'اگر اپراتور به جای `` <<' 'به جای << `' باشد، زبانه های پیشنهادی در text-text متن حذف می شوند.

جستجو و اعدام

سه نوع دستورات وجود دارد: توابع پوسته، دستورات داخلی و برنامه های معمول - و فرمان برای (با نام) در آن منظور جستجو می شود. هر یک از آنها به شیوه ای متفاوت اجرا می شوند.

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

Built-in Shell ها به صورت داخلی اجرا می شوند، بدون ایجاد یک فرآیند جدید.

در غیر این صورت، اگر نام فرمان با تابع یا builtin مطابقت نداشته باشد، فرمان به عنوان یک برنامه عادی در سیستم فایل جستجو می شود (همانطور که در بخش بعدی توضیح داده شده است). هنگامی که یک برنامه عادی اجرا می شود، پوسته برنامه را اجرا می کند، آرگومان ها و محیط را به برنامه می برد. اگر برنامه یک فایل اجرایی معمولی نیست (به عنوان مثال، اگر آن را با شماره "جادویی" که نمایش ASCII آن "#!" نیست آغاز کند، پس اجرا (2) Er ENOEXEC را پس می گیرد) پوسته برنامه را در یک زیرمجموعه پوسته کودک خود را در این مورد مجددا فعال خواهد کرد، به طوری که اثر همانند یک پوسته جدید برای رسیدگی به اسکریپت ad hoc پوسته فراخوانی خواهد شد، به جز اینکه مکان دستورات hash شده در پوشه اصلی توسط کودک.

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

جستجوی مسیر

هنگام قرار دادن یک دستور، پوسته اول به نظر می رسد برای دیدن اینکه آیا آن تابع پوسته با آن نام است. سپس به دنبال یک فرمان builtin با این نام میگردد. اگر یک فرمان builtin یافت نشد، یکی از دو چیز اتفاق می افتد:

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

فرمان خروج وضعیت

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

دستورات پیچیده

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

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

خطوط لوله

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

فرمت یک خط لوله:

[!] command1 [| فرمان 2 ...]

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

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

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

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

$ command1 2> & 1 | فرمان 2

هر دو خروجی استاندارد و خطای استاندارد فرمان 1 را به ورودی استاندارد فرمان 2 می فرستد.

A؛ یا ترمینال باعث می شود فهرست AND-OR قبلی (شرح داده شده در ادامه) به صورت پیوسته اجرا شود؛ a و باعث اعدام غیرمسوول شده از AND-OR قبلی می شود.

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

دستورات پس زمینه -

اگر یک فرمان بوسیله اپراتور کنترل ampersand (&) خاتمه یابد، پوسته دستور را به صورت یکپارچه اجرا می کند - یعنی پوسته منتظر دستور فرمان نیست تا قبل از اجرای دستور بعدی، پایان یابد.

فرمت برای اجرای فرمان در پس زمینه:

command1 & [command2 و ...]

اگر پوسته تعاملی نباشد، ورودی استاندارد فرمان ناهمزمان به / dev / null تنظیم می شود

لیست ها - به طور کلی صحبت کردن

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

اپراتورهای فهرست کوتاه مدار

`` && '' و `` || '' عبارتند از AND-OR لیست اپراتورها. `` && '' اولین دستور را اجرا می کند و سپس دستور دوم را اجرا می کند و وضعیت خروج از دستور اول صفر است. `` || '' شبیه است، اما دستور دوم را اجرا می کند؛ وضعیت خروج از دستور اول غیر صفر است. `` && '' و `` || '' هر دو اولویت دارند.

ساخت جریان کنترل - اگر، در حالی که، برای مورد

نحو دستور if است

اگر لیست
سپس فهرست
[لیست elif
سپس فهرست] ...
[لیست دیگر]
فی

نحو دستور فرمان است

در حالی که لیست
لیست را انجام دهید
انجام شده

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

نحو دستور برای این است

برای متغیر در کلمه ...
لیست را انجام دهید
انجام شده

کلمات را گسترش داده و سپس لیست بارها و بارها با متغیر تعیین شده به هر کلمه به نوبه خود اجرا می شود. انجام و انجام ممکن است به جای `` {'' و ``} ''

نحو شکستن و ادامه فرمان است

شکستن [num]
ادامه [num]

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

نحو دستور فرمان است

کلمه مورد در
الگو)؛
...
esac

الگوی در واقع می تواند یک یا چند الگوهای (نگاه کنید به الگوهای شل که بعدا شرح داده شده است)، توسط کاراکتر `` 'جدا شده است.

دستورالعمل گروه بندی با هم

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

(لیست)

یا

{list؛

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

{printf hello؛ printf world \ n "؛}> سلام

توابع

نحو تعریف تابع است

دستور name ()

تعریف تابع یک عبارت اجرایی است؛ هنگامی که اجرا می شود، یک تابع به نام نامی را نصب می کند و یک وضعیت خروج صفر را باز می کند. فرمان معمولا یک لیست بین `` {'' و ``} '' است

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

محلی [متغیر | -] ...

محلی به عنوان یک فرمان builtin اجرا می شود.

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

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

نحو دستور بازگشت است

بازگشت [exitstatus

این کار عملکرد فعلی را خاتمه می دهد. بازگشت به عنوان یک فرمان builtin اجرا می شود.

متغیرها و پارامترها

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

نام = ارزش

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

پارامترهای موقتی

یک پارامتر موقعیتی یک پارامتر مشخص شده توسط یک عدد است (n> 0). پوسته ابتدا آن را به مقادیر استدلال خط فرمان آن که اسمش اسکریپت پوسته را دنبال می کند، تنظیم می کند. مجموعه (1) builtin همچنین می تواند برای تنظیم یا تنظیم مجدد آنها استفاده شود.

پارامترهای ویژه

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

*

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

@

به پارامترهای موقعیتی، از یک شروع می شود. هنگامی که گسترش در عرض دو نقل قول اتفاق می افتد، هر پارامتر موقعیت به عنوان یک استدلال جداگانه گسترش می یابد. اگر پارامترهای موقعیتی وجود نداشته باشد، گسترش @ باعث صفر صفر می شود، حتی زمانی که @ دوبار نقل قول شده است. به عنوان مثال، این به این معنی است که اگر $ 1 `` abc '' و $ 2 `` def ghi '' باشد، Qq $ @ به دو استدلال گسترش می یابد:

abc def ghi

#

به تعداد پارامترهای موقعیتی گسترش می یابد.

؟

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

- (خط ربط.)

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

$

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

!

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

0 (صفر.)

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

گسترش ورد

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

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

ترتیب گسترش کلمه:

  1. توسعه تیلد، توسعه پارامتر، جایگزینی فرمان، تفریق دقیق (این همه در همان زمان رخ می دهد).
  2. تقسیم فیلد در زمینه های تولید شده توسط مرحله (1) انجام می شود مگر آنکه متغیر IFS صفر باشد.
  3. Extension Pathname (مگر اینکه مجموعه - f در اثر باشد).
  4. نقل قول حذف

شخصیت $ برای معرفی پارامتر گسترش، جایگزینی فرمان یا ارزیابی ریاضی استفاده می شود.

گسترش تیلد (جایگزین یک دایرکتوری خانگی کاربر)

یک کلمه با یک شخصیت تیلده (~) آغاز می شود که به تیلد گسترش می یابد. تمام کاراکترها تا یک اسلش (/) یا پایان کلمه به عنوان یک نام کاربری رفتار می شوند و با دایرکتوری خانگی کاربر جایگزین می شوند. اگر نام کاربری از دست رفته باشد (همانطور که در ~ / foobar)، مقدار tilde با مقدار متغیر HOME (دایرکتوری خانگی کاربر فعلی) جایگزین می شود.

توسعه پارامتر

فرمت برای گسترش پارامتر به شرح زیر است:

جایی که بیان شامل تمام کاراکترها می شود تا زمانی که تطبیقی ​​``} '' Any ``} '' با استفاده از یک backslash یا درون یک رشته نقل قول فرار کرد و شخصیت ها در محاسبات جاسازی شده، جایگزینی فرمان و گسترش متغیرها در تعیین تطابق ``} ''

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

مقدار، اگر هر، از پارامتر جایگزین شود.

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

  1. گسترش پهنمام بر روی نتایج گسترش انجام نمی شود.
  2. تقسیم فیلد بر اساس نتایج گسترش، به استثنای @ انجام نمی شود.

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

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

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

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

از ارزش جایگزین استفاده کنید. اگر پارامتر unset یا null باشد، null جایگزین میشود؛ در غیر این صورت، گسترش کلمه جایگزین می شود.

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

طول رشته. طول در کاراکترهای مقدار پارامتر.

چهار نوع از گسترش پارامتر زیر برای پردازش زیر رشته ارائه شده است. در هر مورد، علامت تطبیق الگو (نگاه کنید به الگوهای شل)، به جای نمایش عبارات منظم، برای ارزیابی الگوهای استفاده می شود. اگر پارامتر * یا @ باشد، نتیجه انبساط نامشخص است. محدوده رشته گسترش کامل پارامتر در دو نقل قول باعث نمی شود که چهار نوع از شخصیت های الگوی زیر نقل قول شوند، در حالی که نقل قول های شخصیت ها در این بند این تاثیر را دارند.

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

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

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

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

جایگزینی فرماندهی

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

$ (فرمان)

و یا Po 'backquoted' 'نسخه کامپیوتر:

`فرمان '

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

ریاضیات انبساط

توسعه محاسباتی یک مکانیزم برای ارزیابی عبارت محاسباتی و جایگزینی آن را فراهم می کند. فرمت برای گسترش محاسباتی به شرح زیر است:

$ ((بیان))

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

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

تقسیم فضای سفید (تقسیم فیلد)

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

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

پهنای باند (نام پرونده)

به غیر از پرچم - f ، تولید نام فایل پس از تکمیل کلمه انجام می شود. هر کلمه به عنوان یک سری از الگوهای، جدا شده توسط slashes مشاهده شده است. فرآیند توسعه کلمه را با نام تمام فایل های موجود جایگزین می کند که نام آنها می تواند با جایگزینی هر الگو با یک رشته ای که با الگوی مشخص مطابقت دارد، جایگزین شود. در این دو محدودیت وجود دارد: ابتدا یک الگوی نمی تواند یک رشته حاوی علامت را رعایت کند و دوم، یک الگوی می تواند رشته ای را که با یک دوره شروع می شود مطابقت دهد مگر اینکه اولین علامت الگوی یک دوره باشد. بخش بعدی الگوهای مورد استفاده برای هر دو Extension Pathname و Case (1) را توصیف می کند.

الگوهای شل

یک الگوی شامل شخصیت های عادی است که خودشان و متا شخصیت ها را مطابقت می دهند. متاکاروهای ``! '' `` * * `` `؟ '' و` `['' این شخصیت ها در صورت نقل قول معانی خاص خود را از دست می دهند. وقتی متغیر فرمان یا متغیر انجام می شود و علامت دلار یا پیشنهادی به دو صورت ذکر نمی شود، مقدار متغیر یا خروجی فرمان برای این کاراکترها اسکن می شود و آنها به متا-شخصیت تبدیل می شوند.

یک ستاره (`* * ') با هر رشته ای از شخصیت ها مطابقت دارد. یک علامت سوال مطابق با هر شخصیت است. براکت چپ (`` [''] یک کلاس شخصیت را معرفی می کند. انتهای کلاس کاراکتر با یک (``] '' نشان داده می شود) اگر ``] '' گم شده است و سپس `` ['' مطابق با `` ['' است به جای معرفی یک کلاس شخصیت. یک کلاس شخصیت با هر یک از کاراکترهای بین مربع های مربع مطابقت دارد. طیف وسیعی از کاراکترها ممکن است با استفاده از علامت منفی مشخص شوند. کلاس شخصیت ممکن است با ایجاد نقطه علامت تعجب اولین علامت کلاس کاراکتر باشد.

برای قرار دادن یک ``] '' در کلاس شخصیت، آن را اولین شخصیت ذکر شده (پس از ``! '' اگر وجود داشته باشد). برای وارد کردن علامت منهای، آن را اولین یا آخرین شخصیت لیست شده است

Builtins

این بخش دستورات builtin را که داخلی هستند، فهرست می کند زیرا آنها نیاز به انجام عملیاتی دارند که نمی توانند توسط یک فرآیند جداگانه اجرا شوند. علاوه بر این، دستورات دیگری نیز وجود دارد که ممکن است برای کارآیی ساخته شوند (مانند echo 1).

:

یک دستور null که یک مقدار خروجی 0 (true) را نشان می دهد.

. فایل

دستورات در فایل مشخص شده توسط پوسته خوانده می شوند و اجرا می شوند.

نام مستعار [ name [ = string ... ]]

اگر name = string مشخص شود، پوسته نام مستعار را با رشته value تعریف می کند اگر فقط نام مشخص شده باشد، مقدار نام مستعار چاپ می شود. بدون استدلال، نام مستعار builtin نام ها و مقادیر تمام نامهای تعریف شده را چاپ می کند (see unalias را ببینید )

BG [ شغل] ...

در پسزمینه مشاغل مشخص شده (یا شغل فعلی اگر مشاغل داده نشوند) را ادامه دهید.

دستور فرمان ...

دستورالعمل builtin مشخص شده را اجرا کنید. (این مفید است هنگامی که شما یک تابع پوسته با همان نام یک فرمان builtin داشته باشید.)

سی دی [ دایرکتوری ]

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

رشته eval ...

همه آرگومان ها را با فضاهای مرتبط کنید. سپس دوباره تجزیه و اجرا کنید.

exec [ command arg ... ]

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

خروج [ exitstatus ]

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

نام صادرات ...

export -p

نام های مشخص شده صادر می شوند به طوری که آنها در محیط دستورات بعدی ظاهر می شوند. تنها راه un-export یک متغیر این است که آن را رد کنید. پوسته اجازه می دهد تا مقدار یک متغیر را در همان زمان تعیین می شود که توسط نوشتن صادر می شود

نام صادرات = ارزش

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

fc [- e editor ] [ اولین [ آخرین ]]

fc -l [ -n ] [ اولین [ last ]]

fc -s [ قدیمی = جدید ] [ اولین ]

fc builtin لیست ها را ویرایش می کند و دوباره اجرا می کند، دستورات قبلا وارد یک پوسته تعاملی شده است.

-e ویرایشگر

برای ویرایش دستورات از ویرایشگر به نام ویرایشگر استفاده کنید. رشته ویرایشگر یک نام فرمان است که برای جستجوی از طریق متغیر PATH مورد استفاده قرار می گیرد. مقدار در متغیر FCEDIT به عنوان پیش فرض هنگامی که - e مشخص نیست استفاده می شود. اگر FCEDIT صفر یا خاموش باشد، مقدار متغیر EDITOR مورد استفاده قرار می گیرد. اگر EDITOR null یا unset باشد، ed (1) به عنوان ویرایشگر استفاده می شود.

-l (ell)

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

-n

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

-r

معکوس کردن دستورات لیست شده (با - و یا ویرایش (با هیچ - و نه - S)

-s

دستور را بدون فراخوانی یک ویرایشگر دوباره اجرا کنید.

اولین

آخر

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

[+] شماره

یک شماره مثبت نشان دهنده یک شماره فرمان؛ اعداد فرمان با گزینه - l نمایش داده می شود.

-عدد

یک عدد اعلان منفی نشان دهنده فرمان است که تعدادی از دستورات قبلا اجرا شده است. به عنوان مثال، -1 دستور بلافاصله قبلی است.

رشته

رشته ای که نشان دهنده آخرین دستور وارد شده است که با آن رشته شروع می شود. اگر عنصر old = new نیز مشخص نشده باشد، شکل رشته اول اول می تواند یک علامت برابر با تعبیه نشود.

متغیرهای محیط زیر بر اجرای fc تاثیر می گذارد:

FCEDIT

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

تشخیص دهید

تعداد دستورات قبلی که قابل دسترسی هستند.

fg [ شغل ]

کار پیشنهادی یا شغل فعلی را به پیش زمینه انتقال دهید.

getopts optstring var

دستور getopts POSIX ، که با Label های Bell آشنا نمی شود - getopt (1) استفاده می شود.

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

فرمان getopts به دلیل برخورد با استدلال هایی که حاوی فضای فضای سفید را دارند، قدیمیتر ابزار Getopt (1) را تخریب می کند.

برای به دست آوردن گزینه ها و استدلال های آنها از یک لیست از پارامترها می توان از Getopts ساخته شده استفاده کرد. هنگامی که فراخوانی می شود، getopts مقدار گزینه بعدی را از رشته گزینه در لیست در متغیر پوسته مشخص شده توسط var می گیرد و این شاخص در متغیر پوسته OPTIND هنگامی که پوسته فراخوانی می شود، OPTIND به مقدار 1 آغاز می شود. برای هر گزینه ای که نیاز است یک استدلال، ساختار getopts آن را در متغیر پوسته OPTARG قرار می دهد اگر گزینه ای در optstring مجاز نباشد، OPTARG خاموش خواهد شد.

optstring یک رشته از گزینه های مشخص شده است. اگر یک نامه با یک کولون دنبال می شود، انتظار می رود که این گزینه یک استدلال داشته باشد که ممکن است یا نمی تواند از طریق فضای سفید جدا شود. اگر یک کاراکتر گزینه در جایی که انتظار می رود پیدا نشد، getopts متغیر var را به ``؟ '' تنظیم خواهد کرد و سپس getopts OPTARG را غیرفعال کرده و خروجی را به خطای استاندارد ارسال می کند. با مشخص کردن کولون به عنوان اولین کاراکتر optstring تمام اشتباهات نادیده گرفته می شود.

هنگامی که آخرین گزینه به دست می آید، مقدار nonzero بازگردانده می شود. اگر هیچ آرگومان باقیمانده ای وجود نداشته باشد، getopts var را به گزینه خاصی تنظیم می کند، `` - '' در غیر این صورت، var را به ``؟ '' تنظیم خواهد کرد

قطعه کد زیر نشان می دهد که چگونه یک آرگومان را برای یک فرمان که می تواند گزینه های [a] و [b] و گزینه [c] را که نیاز به یک استدلال دارد پردازش کند.

در حالی که getopts abc: f
انجام دادن
مورد $ f در
a | ب) پرچم = $ f ؛؛
ج) carg = $ OPTARG ؛؛
\؟) echo $ USAGE؛ خروج 1 ؛؛
esac
انجام شده
shift `expr $ OPTIND - 1`

این کد هر یک از موارد زیر را به عنوان معادل آن قبول می کند:

فایل پرونده cmd-accarg
cmd -a -c فایل فایل arg
cmd -carg -a فایل فایل
cmd -a -carg - فایل فایل

دستور hash -rv ...

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

با استدلال، دستور hash دستورات مشخص شده را از جدول هش حذف می کند (مگر اینکه آنها توابع هستند) و سپس آنها را می یابند. با گزینه -v، هش، محل دستورات را همانطور که می بینید، می نویسد. گزینه r - دستور hash را برای حذف همه ورودی ها در جدول هش به جز توابع، باعث می شود.

شابید [ شغل ]

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

شغل ها

این فرمان تمام فرایندهای پس زمینه را که فرزندان پروسه پوسته فعلی هستند، لیست می کند.

pwd

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

خواندن [- p prompt ] [- r ] متغیر ...

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

بطور پیش فرض، مگر اینکه گزینه r - مشخص شده باشد، backslash \ `\ \ 'به عنوان یک کاراکتر فرار عمل می کند و باعث می شود شخصیت بعدی به معنای واقعی کلمه باشد. اگر بکسلشل با یک خط جدید دنبال شود، بک اسلش و خط جدید حذف خواهند شد.

نام فقط خواندن ...

readonly -p

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

readonly نام = ارزش

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

مجموعه [{- گزینه | + گزینه ها | - arg ... ]

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

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

اگر گزینه ها داده می شود، پرچم گزینه های مشخص شده را تنظیم می کند یا آنها را پاک می کند همانطور که در بخش Sx Argument List Processing گفته شده است.

استفاده سوم از دستور set برای تنظیم مقادیر پارامترهای موقعیت پوسته پوسته به args مشخص شده است. برای تغییر پارامترهای موقعیتی بدون تغییر هر گزینه، از `` - '' به عنوان اولین استدلال برای تنظیم استفاده کنید. اگر هیچ آرگومان وجود نداشته باشد، فرمان مجموعه تمام پارامترهای موقعیتی را پاک می کند (معادل اجرای `` shift $ #. ''

مقدار متغیر

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

تغییر [ n ]

تغییر پارامترهای موقعیتی n بار. یک تغییر مقدار ارزش 1 $ را به ارزش $ 2 ارزش $ 2 به ارزش $ 3 و به همین ترتیب، ارزش $ # را به یک کاهش می دهد. اگر n از تعداد پارامترهای موقعیتی بیشتر باشد، تغییر یک پیام خطا را صادر می کند و با وضعیت برگشت 2 خروج می کند.

بار

زمانهای کاربر و سیستم انباشته شده برای پوسته و برای فرآیندهای اجرا شده از پوسته را چاپ کنید. وضعیت بازگشت 0 است.

سیگنال عمل تله ...

به دلیل پوسته برای تجزیه و اجرا عمل هنگامی که هر یک از سیگنال های مشخص شده دریافت می شود. سیگنال ها با شماره سیگنال مشخص می شوند. اگر سیگنال 0 باشد ، وقتی که پوسته خارج می شود، عمل اجرا می شود. عمل ممکن است null باشد یا `- '' اولین باعث می شود که سیگنال مشخص شده نادیده گرفته شود و دوم باعث می شود که اقدام پیش فرض انجام شود. هنگامی که پوسته خاموش یک زیرچشمی ، آن سیگنال های به دام افتاده (اما نه نادیده گرفته شده) به عمل پیش فرض بازنشانی می کند. دستور trap روی سیگنال هایی که در هنگام ورود به پوسته نادیده گرفته می شود تاثیری ندارد.

نوع [ نام ... ]

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

ulimit [ -H - S ] [ -tfdscmlpn [ value ]]

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

-H

تنظیم یا پرس و جو در مورد محدودیت های سخت است

-S

تنظیم و یا پرس و جو در مورد محدودیت های نرم. اگر نه - H nor - S مشخص شده است، محدودیت نرم افزاری نمایش داده می شود یا هر دو محدودیت تنظیم می شوند. اگر هر دو مشخص شوند، آخرین نفر برنده خواهد شد.

محدودیت بازجویی یا تنظیم، سپس با تعیین هر کدام از این پرچم ها انتخاب می شود:

-a

تمام محدودیت های فعلی را نشان می دهد

نمایش یا تنظیم محدودیت در زمان CPU (در ثانیه)

-f

نمایش یا تنظیم محدودیت در بزرگترین فایل که می تواند ایجاد شود (در بلوک های 512 بایت)

-d

محدودیت اندازه داده های بخش پردازش را نشان می دهد (در کیلوبایت)

-s

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

-c

نمایش یا تنظیم محدودیت بزرگترین اندازه تخلخل اصلی که میتواند تولید شود (در بلوک 512 بایت)

-m

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

-l

نشان می دهد یا محدود کردن میزان حافظه ای که یک فرآیند می تواند با mlock (2) (در کیلوبایت )

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

-n

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

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

محدودیت های یک فرآیند دلخواه را می توان با استفاده از ابزار sysctl (8) نمایش داده یا تنظیم کرد.

umask [ ماسک ]

مقدار umask (نگاه کنید به umask (2)) به ارزش هشتم مشخص شده را تنظیم کنید. اگر استدلال حذف شود، مقدار umask چاپ می شود.

unalias [- a ] [ نام ]

اگر نام مشخص شده باشد، پوسته این نام مستعار را حذف می کند. اگر - مشخص شده است، تمام نام مستعار حذف می شوند.

نام بازنشسته ...

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

صبر کنید [ شغل ]

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

ویرایش خط فرمان

هنگامی که SH از یک ترمینال به صورت تعاملی استفاده می شود، دستور فعلی و تاریخچه دستور (به fc در Sx Builtins مراجعه شود) را می توان با ویرایش خط فرمان vi-mode ویرایش کرد. این حالت با استفاده از دستورات، شرح داده شده در زیر، شبیه به یک زیر مجموعه از آنهایی که در صفحه vi man شرح داده شده است. فرمان `set '-o vi امکان ویرایش و ویرایش VI را در حالت ورودی vi را فعال می کند. با فعال شدن vi-mode، sh می تواند بین حالت درج و حالت فرمان تغییر کند. ویرایشگر در اینجا کامل نیست، اما در یک سند دیگر قرار دارد. این شبیه به vi است: تایپ کردن Aq ESC شما را به حالت فرمان VI فرمان هدایت می کند. در حالی که در حالت فرمان، بازگشت به عقب را لمس می کند، خط را به پوسته منتقل می کند.

مهم: از دستور man ( ٪ man ) برای دیدن نحوه استفاده از دستور در رایانه خاص خود استفاده کنید.