| TCSH(1) | General Commands Manual | TCSH(1) |
نام (NAME)
tcsh —
پوسته C با
قابلیت
تکمیل نام
پرونده و
ویرایش خط
فرمان
خلاصه دستور (SYNOPSIS)
tcsh
[-bcdefFimnqstvVxX]
[-Dname[=value]]
[arg] ... tcsh
-l
توضیحات (DESCRIPTION)
tcsh یک
نسخه
بهبودیافته
اما کاملاً
سازگار از
پوسته C
یونیکس
برکلی،
csh(1) است.
این برنامه
یک مفسر
زبان فرمان
است که هم به
عنوان یک
پوسته
تعاملی
ورود به
سیستم و هم
به عنوان
پردازشگر
دستورات
اسکریپت شل
قابل
استفاده
است. این
پوسته شامل
یک
ویرایشگر
خط فرمان
(نگاه کنید
به The
command-line editor (+)) ،
تکمیل کلمه
قابل
برنامهریزی
(نگاه کنید
به Completion
and listing (+)) ،
تصحیح غلط
املایی
(نگاه کنید
به Spelling
correction (+)) ،
سازوکار
تاریخچه
(نگاه کنید
به History
substitution) ،
کنترل
کارها (نگاه
کنید به
Jobs) و
ساختار
نحوی شبیه
به زبان C
است. بخش
NEW FEATURES (+)
بهبودهای
عمده tcsh
نسبت به
csh(1) را
شرح میدهد.
در سرتاسر
این
راهنما،
قابلیتهایی
از tcsh که
در اکثر
پیادهسازیهای
csh(1)
(بهطور
ویژه، 4.4BSD
csh(1))
یافت
نمیشوند
با ‘(+)’
نشانهگذاری
شدهاند، و
قابلیتهایی
که در
csh(1)
وجود دارند
اما
معمولاً
مستند
نشدهاند
با ‘(u)’ مشخص
گردیدهاند.
پردازش فهرست آرگومانها
اگر
نخستین
آرگومان
(آرگومان ۰)
به پوسته
‘-’
باشد، در
این صورت یک
پوستهٔ
ورود (login shell) است.
همچنین
میتوان یک
پوستهٔ
ورود را با
فراخوانی
پوسته با
فلگ -l
بهعنوان
تنها
آرگومان
مشخص کرد.
بقیهٔ آرگومانهای فلگ به شرح زیر تفسیر میشوند:
-b- باعث یک “توقف (break)” اجباری در پردازش گزینهها میشود، و موجب میگردد هرگونه آرگومان بعدی پوسته بهعنوان آرگومانهای غیرگزینهای در نظر گرفته شوند. آرگومانهای باقیمانده بهعنوان گزینههای پوسته تفسیر نخواهند شد. این امر ممکن است برای ارسال گزینهها به یک اسکریپت پوسته بدون سردرگمی یا فریب احتمالی استفاده شود. پوسته بدون این گزینه یک اسکریپت با بیت set-user ID را اجرا نخواهد کرد.
-c- دستورها از
آرگومان
بعدی
خوانده
میشوند (که
باید وجود
داشته
باشد، و
باید یک
آرگومان
منفرد
باشد)، جهت
ارجاع در
متغیر
پوستهای
commandذخیره شده، و اجرا میگردند. هر آرگومان باقیمانده در متغیر پوستهایargvقرار میگیرد. -d- پوسته پشتهٔ دایرکتوری را از ~/.cshdirs بارگذاری میکند، همانطور که تحت راهاندازی و خاموشسازی شرح داده شده است، صرفنظر از اینکه یک پوستهٔ ورود باشد یا خیر. (+)
-Dname[=value]- متغیر محیطی name را به value تنظیم میکند. (فقط در Domain/OS) (+)
-e- اگر هر دستور فراخوانیشده بهطور غیرعادی خاتمه یابد یا وضعیت خروج غیرصفر تولید کند، پوسته خارج میشود.
-f- پوسته هیچیک از فایلهای منبع یا راهاندازی را بارگذاری نمیکند، هیچ هَشینگی برای دستورها انجام نمیدهد و بنابراین سریعتر آغاز به کار میکند.
-F- پوسته به جای vfork(2) از fork(2) برای ایجاد پردازهها استفاده میکند. (+)
-i- پوسته تعاملی است و اعلان ورودی سطح بالای خود را نمایش میدهد، حتی اگر به نظر برسد که یک ترمینال نیست. پوستهها بدون این گزینه نیز در صورتی که ورودیها و خروجیهایشان ترمینال باشند، تعاملی خواهند بود.
-l- پوسته یک
پوسته ورود
(login shell) است. تنها
در صورتی
قابل اعمال
است که
-lتنها پرچم مشخصشده باشد. -m- پوسته فایل
~/.tcshrc را
حتی اگر به
کاربر موثر
تعلق
نداشته
باشد
بارگذاری
میکند.
نسخههای
جدیدتر
su(1)
میتوانند
-mرا به پوسته منتقل کنند. (+) -n- پوسته دستورها را تجزیه (parse) میکند اما آنها را اجرا نمیکند. این ویژگی به اشکالزدایی اسکریپتهای پوسته کمک میکند.
-q- پوسته SIGQUIT را میپذیرد (ببینید مدیریت سیگنالها (Signal handling)) و هنگامی که تحت یک دیباگر استفاده میشود رفتاری مناسب دارد. کنترل کار (Job control) غیرفعال است. (u)
-s- ورودی دستور از ورودی استاندارد گرفته میشود.
-t- پوسته یک خط
ورودی واحد
را خوانده و
اجرا
میکند.
میتوان از
یک ‘
\’ برای گریز (escape) از خط جدید در انتهای این خط و ادامهدادن آن در خطی دیگر استفاده کرد. -v- متغیر
پوسته
verboseرا تنظیم میکند، به طوری که ورودی دستور پس از جایگزینی تاریخچه پژواک (echo) میشود. -x- متغیر
پوسته
echoرا تنظیم میکند، به طوری که دستورها بلافاصله پیش از اجرا پژواک میشوند. -V- متغیر
پوسته
verboseرا حتی پیش از اجرای ~/.tcshrc تنظیم میکند. -X- نسبت به
-xهمان نقشی را دارد که-Vنسبت به-vدارد. --help- یک پیام راهنما را در خروجی استاندارد چاپ کرده و خارج میشود. (+)
--version- نسخه/بستر/گزینههای
کامپایل را
در خروجی
استاندارد
چاپ کرده و
خارج
میشود. این
اطلاعات
همچنین در
متغیر
پوسته
versionگنجانده شده است. (+)
پس از
پردازش
آرگومانهای
فلگ، اگر
آرگومانهایی
باقی
بمانند اما
هیچیک از
گزینههای
-c -،
-i -،
-s یا -t
داده نشده
باشند،
اولین
آرگومان به
عنوان نام
فایلی از
دستورها،
یا یک
“اسکریپت”
برای اجرا
در نظر
گرفته
میشود.
پوسته این
فایل را باز
کرده و نام
آن را برای
جایگزینی
احتمالی
بعدی توسط
‘$0’
ذخیره
میکند. از
آنجا که
بسیاری از
سیستمها
از
پوستههای
استاندارد
نسخه ۶ یا
نسخه ۷
استفاده
میکنند که
اسکریپتهای
پوسته
آنها با
این پوسته
سازگار
نیست،
پوسته از
چنین پوسته
“استانداردی”
برای اجرای
اسکریپتی
استفاده
میکند که
نویسه اول
آن ‘#’
نیست، یعنی
با یک کامنت
آغاز
نمیشود.
آرگومانهای
باقیمانده
در متغیر شل
argv قرار
میگیرند.
راهاندازی و خاتمه (Startup and shutdown)
یک شل ورود
(login shell) با اجرای
دستورها از
فایلهای
سیستمی
/etc/csh.cshrc و
/etc/csh.login آغاز
به کار
میکند. سپس
دستورهای
موجود در
فایلهای
دایرکتوری
home کاربر
را اجرا
مینماید:
ابتدا ~/.tcshrc
(+) یا در
صورت پیدا
نشدن ~/.tcshrc
فایل ~/.cshrc ،
سپس
محتویات
~/.history (یا
مقدار
متغیر شل
histfile) در
حافظه
بارگذاری
میشود، پس
از آن ~/.login و
در نهایت
~/.cshdirs (یا
مقدار
متغیر شل
dirsfile) (+).
شل ممکن است
در صورت
کامپایل
شدن به این
صورت،
/etc/csh.login را
پیش از
/etc/csh.cshrc
(بهجای پس
از آن)، و
~/.login را پیش
از ~/.tcshrc یا
~/.cshrc و ~/.history
(بهجای پس
از آنها)
بخواند؛
متغیر شل
version را
ببینید. (+)
شلهای غیرورود (non-login) در هنگام راهاندازی تنها /etc/csh.cshrc و ~/.tcshrc یا ~/.cshrc را میخوانند.
برای نمونههایی از فایلهای راهاندازی، لطفاً به این نشانی مراجعه کنید: http://tcshrc.sourceforge.net
دستورهایی
مانند
stty(1) و
tset(1) که
تنها نیاز
است در هر
بار ورود
یکبار
اجرا شوند،
معمولاً در
فایل ~/.login
کاربر قرار
میگیرند.
کاربرانی
که نیاز
دارند از یک
مجموعه
فایل مشترک
هم برای
csh(1) و هم
برای tcsh
استفاده
کنند،
میتوانند
تنها یک
فایل ~/.cshrc
داشته
باشند که
پیش از
استفاده از
دستورهای
ویژهی
tcsh، وجود
متغیر
پوستهٔ
tcsh را
بررسی
میکند؛ یا
اینکه
میتوانند
هر دو فایل
~/.cshrc و ~/.tcshrc
را داشته
باشند، به
طوری که
دومی فایل
~/.cshrc را
source کند
(دستور
توکار را
ببینید). در
ادامهی
این
راهنما،
منظور از
~/.tcshrc همان
~/.tcshrc است یا
در صورتی که
~/.tcshrc یافت
نشود،
~/.cshrc.
در حالت عادی، پوسته شروع به خواندن دستورها از ترمینال میکند و اعلان زیر را نمایش میدهد:
> (پردازش آرگومانها و استفاده از پوسته برای پردازش فایلهای حاوی اسکریپتهای دستوری، بعداً شرح داده شدهاند.) پوسته به طور پیوسته یک خط از ورودی دستور را میخواند، آن را به کلمات تفکیک میکند، در فهرست تاریخچه دستورها قرار میدهد، آن را تجزیه کرده و هر دستور موجود در خط را اجرا میکند.
میتوان
با وارد
کردن ^D در
یک خط خالی،
دستور logout
یا login یا
از طریق
سازوکار
خروج
خودکار
پوسته
(متغیر
پوستهای
autologout را
ببینید) از
سیستم خارج
شد. هنگامی
که یک
پوستهٔ
ورود به
سیستم
خاتمه
مییابد،
متغیر
پوستهای
logout را
برحسب مورد
به ‘normal’
یا ‘automatic’
تنظیم
میکند،
سپس
دستورات
موجود در
فایلهای
/etc/csh.logout و
~/.logout را
اجرا
مینماید.
اگر پوسته
بدین صورت
کامپایل
شده باشد،
ممکن است
هنگام خروج
سیگنال DTR را
قطع کند؛
متغیر
پوستهای
version را
ببینید.
نامهای فایلهای ورود و خروج سیستم جهت سازگاری با گونههای مختلف csh(1) از سیستمی به سیستم دیگر متفاوت است؛ بخش فایلها (FILES) را ببینید.
ویرایش (Editing)
ما ابتدا ویرایشگر خط فرمان (+) (The command-line editor (+)) را شرح میدهیم. بخشهای تکمیل و فهرستبندی (+) (Completion and listing (+)) و تصحیح املا (+) (Spelling correction (+)) دو مجموعه از قابلیتها را شرح میدهند که به عنوان دستورات ویرایشگر پیادهسازی شدهاند اما شایستهٔ بررسی جداگانه هستند. در نهایت، بخش دستورات ویرایشگر (+) (Editor commands (+)) دستورات ویرایشگر مختص این پوسته و کلیدهای مقیدشدهٔ پیشفرض آنها را فهرست و توصیف میکند.
ویرایشگر خط فرمان (+) (The command-line editor (+))
ورودی خط
فرمان را
میتوان با
استفاده از
توالی
کلیدهایی
بسیار شبیه
به کلیدهای
استفادهشده
در emacs(1)
یا vi(1)
ویرایش کرد.
ویرایشگر
تنها زمانی
فعال است که
متغیر
پوستهای
edit تنظیم
شده باشد،
که به طور
پیشفرض در
پوستههای
تعاملی
فعال است.
دستور
توکار bindkey
میتواند
کلیدهای
مقیدشده به
دستورات
ویرایشگر
را نمایش
داده و
تغییر دهد
(بخش
دستورات
ویرایشگر (+) (Editor
commands (+)) را
ببینید).
کلیدهای
مقیدشده به
سبک
emacs(1)به
طور
پیشفرض
استفاده
میشوند
(مگر اینکه
پوسته به
شکل دیگری
کامپایل
شده باشد؛
متغیر
پوستهای
version را
ببینید)،
اما bindkey
میتواند
کلیدهای
مقیدشده را
به صورت
یکجا به
کلیدهای
مقیدشده به
سبک
vi(1)تغییر
دهد.
پوسته
همیشه
کلیدهای
جهتنما را
(به همان
صورتی که در
متغیر
محیطی TERMCAP
تعریف
شدهاند) به
دستورات
ویرایشگر
مقید
میکند:
- کلید
- دستور ویرایشگر
downdown-historyupup-historyleftbackward-charrightforward-char
مگر اینکه
انجام این
کار یک
مقیدسازی
تکنویسهای
دیگر را
تغییر دهد.
میتوان
توالیهای
گریز
کلیدهای
جهتنما را
با استفاده
از settc بر
روی یک رشته
خالی تنظیم
کرد تا از
این
مقیدسازیها
جلوگیری
شود.
توالیهای
ANSI/VT100 برای
کلیدهای
جهتنما
همیشه مقید
هستند.
سایر
مقیدسازیهای
کلیدها، در
بیشتر
موارد همان
چیزی هستند
که کاربران
emacs(1) و
vi(1)
انتظار
دارند و
میتوان
آنها را به
سادگی با
bindkey نمایش
داد،
بنابراین
نیازی به
فهرست کردن
آنها در
اینجا نیست.
به همین
ترتیب،
bindkey
میتواند
دستورات
ویرایشگر
را به همراه
توضیح
کوتاهی
درباره هر
یک فهرست
کند. رفتار
برخی از
مقیدسازیهای
کلید بسته
به اینکه
آیا
مقیدسازیهای
سبک emacs(1)
یا vi(1)در
حال
استفاده
باشند
متفاوت
است؛ برای
اطلاعات
بیشتر vimode
را ببینید.
توجه
داشته
باشید که
مفهوم
“کلمه” در
دستورات
ویرایشگر
با مفهوم آن
در پوسته
یکسان نیست.
ویرایشگر
کلمات را با
هر نویسه
غیرالفبایی-عددی
که در متغیر
پوسته wordchars
وجود ندارد
جدا
میکند، در
حالی که
پوسته تنها
فاصلههای
خالی و برخی
از
نویسههای
دارای
معانی خاص
برای خود را
میشناسد
که در
Lexical structure
فهرست
شدهاند.
تکمیل و فهرستبندی (+)
پوسته اغلب قادر است کلمات را در صورت ارائه یک مخفف منحصربهفرد، کامل کند. به عنوان مثال، با نوشتن بخشی از یک کلمه
ls /usr/lostcomplete-word.
پوسته نام
فایل /usr/lost
را به /usr/lost+found/
کامل کرده و
کلمه ناقص
را در بافر
ورودی با
کلمه کامل
جایگزین
میکند. (به
‘/’
انتهایی
دقت کنید؛
عملیات
تکمیل یک
‘/’ به
انتهای
دایرکتوریهای
تکمیلشده
و یک فاصله
به انتهای
سایر کلمات
تکمیلشده
اضافه
میکند تا
سرعت تایپ
افزایش
یابد و
نشانهای
بصری از
تکمیل
موفقیتآمیز
فراهم شود.
برای
جلوگیری از
این رفتار
میتوان
متغیر
پوسته addsuffix
را لغو
تنظیم کرد.)
اگر هیچ
تطابقی
پیدا نشود
(شاید /usr/lost+found
وجود
نداشته
باشد)، زنگ
ترمینال به
صدا
درمیآید.
اگر کلمه از
قبل کامل
باشد (شاید
یک /usr/lost روی
سیستم شما
وجود دارد،
یا شاید
خیلی جلوتر
فکر
میکردید و
کل آن را
تایپ
کردهاید)
اگر قبلاً
وجود
نداشته
باشد، یک
‘/’ یا
فاصله به
انتهای آن
افزوده
میشود.
تکمیل در هر کجای خط کار میکند، نه فقط در انتهای آن؛ متن تکمیلشده بقیه خط را به سمت راست هل میدهد. تکمیل در وسط یک کلمه اغلب منجر به نویسههای باقیمانده در سمت راست مکاننما میشود که باید حذف شوند.
دستورها و متغیرها را نیز میتوان تا حد زیادی به همین روش تکمیل کرد. برای مثال، تایپ کردن
em[tab]em’
را به
‘emacs’ کامل
میکند اگر
‘emacs’ تنها
دستور
موجود در
سیستم شما
باشد که با
‘em’ شروع
میشود.
تکمیل
میتواند
یک دستور را
در هر
دایرکتوری
موجود در
path یا در
صورت ارائه
یک نام مسیر
کامل پیدا
کند.
تایپ کردن
echo $ar[tab]$ar’ را به
‘$argv’
تکمیل
میکند،
اگر متغیر
دیگری با
‘ar’ شروع
نشده باشد.
پوسته
بافر ورودی
را تجزیه
میکند تا
مشخص سازد
کلمهای که
میخواهید
تکمیل شود
باید به
عنوان نام
فایل،
دستور یا
متغیر
تکمیل گردد.
کلمه اول در
بافر و کلمه
اول پس از
‘; ،’
‘| ،’
‘|& ،’
‘&& ،’ یا
‘||’ یک
دستور در
نظر گرفته
میشود.
کلمهای که
با ‘$’
شروع شود،
یک متغیر در
نظر گرفته
میشود. هر
چیز دیگری
به عنوان
نام فایل
تلقی
میشود. یک
خط خالی به
عنوان نام
فایل
“تکمیل”
میگردد.
شما
میتوانید
تکمیلهای
ممکن یک
کلمه را در
هر زمان با
تایپ کردن
^D برای
اجرای
دستور
ویرایشگر
delete-char-or-list-or-eof
فهرست کنید.
پوسته
تکمیلهای
ممکن را با
استفاده از
دستور
توکار ls-F
فهرست
میکند و
اعلان
پوسته و خط
فرمان
ناتمام را
دوباره چاپ
مینماید؛
برای مثال:
> ls /usr/l[^D] lbin/ lib/ local/ lost+found/ > ls /usr/l
اگر متغیر
پوسته autolist
تنظیم شده
باشد، هر
زمان که
فرایند
تکمیل با
شکست مواجه
شود، پوسته
گزینههای
باقیمانده
(در صورت
وجود) را
فهرست
میکند:
> set autolist > nm /usr/lib/libt[tab] libtermcap.a@ libtermlib.a@ > nm /usr/lib/libterm
اگر متغیر
شل autolist بر
روی ‘ambiguous’
تنظیم شده
باشد،
گزینهها
تنها زمانی
فهرست
میشوند که
تکمیل
ناموفق
باشد و هیچ
نویسهٔ
جدیدی به
کلمه در حال
تکمیل
اضافه
نکند.
نام فایلی
که قرار است
تکمیل شود
میتواند
حاوی
متغیرها،
دایرکتوریهای
خانگی خود
یا دیگران
که با ‘~’
خلاصه
شدهاند
(ببینید
جایگزینی
نام فایل (Filename
substitution)) و
مدخلهای
پشتهٔ
دایرکتوری
که با ‘=’
خلاصه
شدهاند
(ببینید
جایگزینی
پشتهٔ
دایرکتوری (+)
(Directory stack substitution (+))) باشد.
برای
نمونه،
> ls ~k[^D] kahn kas kellogg > ls ~ke[tab] > ls ~kellogg/
یا
> set local = /usr/local > ls $lo[tab] > ls $local/[^D] bin/ etc/ lib/ man/ src/ > ls $local/
توجه
داشته
باشید که
متغیرها را
میتوان
بهطور
صریح با
دستور
ویرایشگر
expand-variables نیز
بسط داد.
دستور
delete-char-or-list-or-eof
تنها در
انتهای خط
فهرست
میکند؛ در
وسط خط،
نویسهٔ زیر
نشانگر را
حذف میکند
و روی یک خط
خالی،
کاربر را
خارج
میکند یا
در صورت
تنظیم بودن
متغیر ignoreeof
، هیچ کاری
انجام
نمیدهد.
M-^D ، که به
دستور
ویرایشگر
list-choices متصل
است،
احتمالات
تکمیل را در
هر کجای خط
فهرست
میکند، و
در صورت
تمایل
میتوان
list-choices (یا هر
یک از
دستورهای
ویرایشگر
مرتبط که
حذف
میکنند یا
نمیکنند،
فهرست
میکنند
و/یا خارج
میشوند،
که ذیل
delete-char-or-list-or-eof
فهرست
شدهاند) را
با استفاده
از دستور
توکار bindkey
به ^D متصل
کرد.
دستورهای
ویرایشگر
complete-word-fwd و
complete-word-back (که
بهطور
پیشفرض به
هیچ کلیدی
مقید
نشدهاند)
میتوانند
برای مرور
بالا و
پایین در
فهرست
کاملسازیهای
ممکن به کار
روند و
کلمهٔ فعلی
را با کلمهٔ
بعدی یا
قبلی در
فهرست
جایگزین
کنند.
متغیر شل
fignore را
میتوان
روی فهرستی
از پسوندها
تنظیم کرد
تا در زمان
کاملسازی
نادیده
گرفته شوند.
مثال زیر را
در نظر
بگیرید:
> ls Makefile condiments.h~ main.o side.c README main.c meal side.o condiments.h main.c~ > set fignore = (.o \~) > emacs ma[^D] main.c main.c~ main.o > emacs ma[tab] > emacs main.c
موارد
‘main.c~’ و
‘main.o’ در
فرآیند
کاملسازی
(اما نه در
فهرستکردن)
نادیده
گرفته
میشوند،
زیرا پسوند
آنها در
fignore آمده
است. توجه
داشته
باشید که یک
‘\’ در
جلوی ‘~’
لازم بود تا
از بسط پیدا
کردن آن به
home
همانطور
که در
جایگزینی
نام فایل (Filename
substitution) شرح داده
شده،
جلوگیری
شود. اگر
تنها یک
گزینه برای
کاملسازی
وجود داشته
باشد، fignore
نادیده
گرفته
میشود.
اگر متغیر
شل complete روی
‘enhance’
تنظیم شده
باشد،
کاملسازی
۱) حروف کوچک
و بزرگ را
نادیده
میگیرد و ۲)
نقطه، خط
تیره و خط
زیرین (‘.
،’ ‘-’ و
‘_’) را به
عنوان
جداکننده
کلمات در
نظر گرفته و
خط تیره و خط
زیرین را
معادل هم
میداند.
اگر
فایلهای
زیر را
داشته
باشید
comp.lang.c comp.lang.perl comp.std.c++ comp.lang.c++ comp.std.c
و تایپ میکردید
mail -f c.l.c[tab]mail -f comp.lang.cmail -f c.l.c[^D]comp.lang.c’ و
‘comp.lang.c++’ را
فهرست
میکرد.
تایپ کردن
mail -f c..c++[^D]comp.lang.c++’ و
‘comp.std.c++’ را
فهرست
میکرد.
تایپ کردن
rm a--file[^D]A_silly_file a-hyphenated-file another_silly_file
هر سه فایل را فهرست میکرد، چرا که بزرگی و کوچکی حروف نادیده گرفته میشود و خطهای پیوند (hyphens) و خطهای زیرین (underscores) معادل یکدیگرند. با این حال، نقطهها با خطهای پیوند یا خطهای زیرین معادل نیستند.
اگر متغیر
پوستهٔ
complete بر روی
‘Enhance’
تنظیم شده
باشد،
تکمیل
خودکار
بزرگی و
کوچکی حروف
و تفاوت
میان
جداکنندههای
کلمهٔ خط
پیوند و خط
زیرین را
تنها زمانی
نادیده
میگیرد که
کاربر یک
نویسهٔ
کوچک یا یک
خط پیوند
تایپ کند.
وارد کردن
یک نویسهٔ
بزرگ یا خط
زیرین با
نویسهٔ
کوچک یا
جداکنندهٔ
کلمهٔ خط
پیوند
متناظر آن
تطابق
نخواهد
یافت.
تایپ کردن
rm a--file[^D]rm A--fileA_silly_file’
تطابق
مییابد و
تایپ کردن
rm a__file[^D]A_silly_file’ و
‘another_silly_file’
تطابق پیدا
میکند،
زیرا کاربر
بهطور
صریح از یک
نویسهٔ
بزرگ یا
نویسهٔ خط
زیرین
استفاده
کرده است.
تکمیل و
فهرستبندی
تحت تأثیر
چندین
متغیر شل
دیگر قرار
دارند: recexact
میتواند
طوری تنظیم
شود که روی
کوتاهترین
تطابق
یکتای ممکن
عمل تکمیل
را انجام
دهد، حتی
اگر تایپ
بیشتر
بتواند به
یک تطابق
طولانیتر
منجر شود:
> ls fodder foo food foonly > set recexact > rm fo[tab]
تنها بوق
میزند،
زیرا ‘fo’
میتواند
به ‘fod’
یا ‘foo’
گسترش
یابد، اما
اگر یک
‘o’ دیگر
تایپ
کنیم،
> rm foo[tab] > rm foo
تکمیل روی
‘foo’
انجام
میشود،
حتی با
اینکه
‘food’ و
‘foonly’ نیز
مطابقت
دارند. autoexpand
میتواند
طوری تنظیم
شود که
دستور
ویرایشگر
expand-history را
پیش از هر
تلاش برای
تکمیل اجرا
کند، autocorrect
میتواند
طوری تنظیم
شود که
کلمهای را
که قرار است
تکمیل شود
تصحیح
املایی کند
(ببینید
تصحیح
املایی (+))
پیش از هر
تلاش برای
تکمیل، و
correct
میتواند
طوری تنظیم
شود که پس از
فشردن کلید
return دستورات
را بهطور
خودکار
تکمیل کند.
matchbeep
میتواند
طوری تنظیم
شود که
تکمیل در
شرایط
گوناگون
بوق بزند یا
نزند، و
nobeep
میتواند
طوری تنظیم
شود که
اصلاً هیچ
بوقی نزند.
nostat
میتواند
به فهرستی
از
دایرکتوریها
و/یا
الگوهایی
که با
دایرکتوریها
مطابقت
دارند
تنظیم شود
تا سازوکار
تکمیل از
اجرای
stat(2) روی
آن
دایرکتوریها
جلوگیری
کند. listmax و
listmaxrows
میتوانند
طوری تنظیم
شوند که
تعداد
آیتمها و
سطرها را
(بهترتیب)
که بدون
پرسش قبلی
فهرست
میشوند،
محدود کنند.
recognize_only_executables
میتواند
طوری تنظیم
شود که شل
هنگام
فهرست کردن
دستورات،
تنها
فایلهای
اجرایی را
فهرست کند،
اما این کار
بسیار کُند
است.
در نهایت،
دستور
توکار complete
میتواند
برای مشخص
کردن نحوهٔ
تکمیل
کلماتی غیر
از نام
فایلها،
دستورها و
متغیرها
برای پوسته
استفاده
شود. تکمیل و
فهرستبندی
روی
الگوهای
تطبیق فایل
(glob-patterns) کار
نمیکنند
(به
جایگزینی
نام فایل (Filename
substitution) مراجعه
کنید)، اما
دستورهای
ویرایشگر
list-glob و
expand-glob
عملکردهای
مشابهی را
برای
الگوهای
تطبیق فایل
ارائه
میدهند.
تصحیح املایی (+)
پوسته گاهی میتواند املای نام فایلها، دستورها و نام متغیرها را علاوه بر تکمیل و فهرستبندی آنها، تصحیح کند.
کلمات تکی
را میتوان
با دستور
ویرایشگر
spell-word (که
معمولاً به
M-s و M-S
متصل است) و
کل بافر
ورودی را با
spell-line (که
معمولاً به
M-$ متصل
است) تصحیح
املایی کرد.
متغیر
پوستهٔ
correct
میتواند
بر روی
‘cmd’ برای
تصحیح نام
دستور یا
‘all’ برای
تصحیح کل خط
در هر بار
زدن کلید
بازگشت (return)
تنظیم شود،
و autocorrect را
میتوان
طوری تنظیم
کرد که
کلمهٔ مورد
نظر پیش از
هر بار تلاش
برای
تکمیل،
تصحیح شود.
هنگامی که تصحیح املایی با هر یک از این روشها فراخوانی شود و پوسته تشخیص دهد بخشی از خط فرمان به اشتباه تایپ شده است، خط تصحیحشده را اعلان میکند:
> set correct = cmd > lz /usr/bin CORRECT>ls /usr/bin (y|n|e|a)?
میتوان
با وارد
کردن ‘y’
یا کلید
فاصله خط
تصحیحشده
را اجرا
کرد، با
‘e’
دستور
تصحیحنشده
را در بافر
ورودی باقی
گذاشت، با
‘a’
دستور را
لغو کرد؛
گویی کلید
^C زده شده
است، و با
فشردن هر
کلید دیگری
خط اصلی را
بدون تغییر
اجرا نمود.
تصحیح
املا
کاملسازیهای
تعریفشده
توسط کاربر
را تشخیص
میدهد
(دستور
توکار complete
را ببینید).
اگر
کلمهای
ورودی در
موقعیتی که
برای آن یک
کاملسازی
تعریف شده
است، شبیه
به کلمهای
در فهرست
کاملسازی
باشد،
تصحیح املا
آن را به
عنوان غلط
املایی ثبت
کرده و
کلمهٔ دوم
را به عنوان
تصحیح
پیشنهاد
میدهد. با
این حال،
اگر کلمهٔ
ورودی با
هیچیک از
کاملسازیهای
ممکن برای
آن موقعیت
همخوانی
نداشته
باشد،
تصحیح املا
غلط املایی
ثبت
نمیکند.
مانند کاملسازی، تصحیح املا در هر نقطه از خط کار میکند، بقیهٔ خط را به سمت راست هل میدهد و احتمالاً نویسههای اضافی را در سمت راست نشانگر جا میگذارد.
دستورات ویرایشگر (+)
bindkey
اتصالات
کلیدها (key bindings) و
bindkey -l فهرست
دستورات
ویرایشگر
را به همراه
شرح مختصری
از آنها
نمایش
میدهد. در
اینجا تنها
دستورات
جدید یا
بهویژه
جالبِ
ویرایشگر
توضیح داده
شدهاند.
برای
توضیحات
مربوط به
اتصالات
کلیدهای هر
ویرایشگر،
emacs(1) و
vi(1) را
ببینید.
نویسه یا
نویسههایی
که هر دستور
بهطور
پیشفرض به
آنها متصل
است، در
پرانتز
آورده شده
است.
^character به
معنی یک
نویسه
کنترلی و
M-character یک
نویسه متا
است که در
پایانههای
فاقد کلید
متا،
بهصورت
escape-character
(یا ^[character)
نوشته
میشود.
بزرگی و
کوچکی حروف
اهمیت
دارد، اما
دستوراتی
که بهطور
پیشفرض به
حروف متصل
هستند، جهت
سهولت به هر
دو صورت
حروف کوچک و
بزرگ متصل
شدهاند.
دستورات ویرایشگر پشتیبانیشده عبارتند از:
backward-char(^B,left)- یک نویسه به
عقب حرکت
میکند.
رفتار
مکاننما
توسط
vimodeتغییر مییابد. backward-delete-word(M-^H,M-^?)- از ابتدای
کلمه فعلی
تا
مکاننما
را برش
میدهد (cut) - در
بافر برش
ذخیره
میشود.
رفتار مرز
کلمه توسط
vimodeتغییر مییابد. backward-word(M-b,M-B)- به ابتدای
کلمه فعلی
حرکت
میکند.
رفتار مرز
کلمه و
مکاننما
توسط
vimodeتغییر مییابد. beginning-of-line(^A,home)- به ابتدای
خط حرکت
میکند.
رفتار
مکاننما
توسط
vimodeتغییر مییابد. capitalize-word(M-c,M-C)- حروف را از
مکاننما
تا انتهای
کلمه فعلی
بزرگ (capitalize)
میکند.
رفتار مرز
کلمه توسط
vimodeتغییر مییابد. complete-word(tab)- کلمهای را به نحوی که در تکمیل و فهرستبندی (+) شرح داده شده کامل میکند.
complete-word-back(کلید مقید نشده)- مشابه
complete-word-fwd ،اما از انتهای فهرست به سمت بالا حرکت میکند. complete-word-fwd(کلید مقید نشده)- کلمه فعلی را با اولین کلمه در فهرست تکمیلهای ممکن جایگزین میکند. میتواند برای پایین رفتن در طول فهرست تکرار شود. در انتهای فهرست، بوق میزند و به کلمه ناقص بازمیگردد.
complete-word-raw(^X-tab)- مشابه
complete-word ،اما تکمیلهای تعریفشده توسط کاربر را نادیده میگیرد. copy-prev-word(M-^_)- کلمه قبلی
در خط فعلی
را در بافر
ورودی کپی
میکند.
همچنین
ببینید:
insert-last-word. رفتار مرز کلمه توسطvimodeتغییر میکند. dabbrev-expand(M-/)- کلمه فعلی
را به
نزدیکترین
کلمه ماقبل
آن که کلمه
فعلی
زیررشته
آغازین آن
است گسترش
میدهد، و
در صورت
لزوم (یک
بار) در
سراسر
فهرست
تاریخچه
میچرخد.
تکرار
dabbrev-expandبدون هیچگونه تایپ میانی، به کلمه قبلی بعدی و غیره تغییر میکند، و موارد مطابقت یکسان را نادیده میگیرد؛ بسیار شبیه به کاری کهhistory-search-backwardانجام میدهد. delete-char(کلید مقید نشده)- نویسه زیر
مکاننما
را حذف
میکند.
همچنین
ببینید:
delete-char-or-list-or-eof. رفتار مکاننما توسطvimodeتغییر میکند. delete-char-or-eof(کلید مقید نشده)- اگر
نویسهای
زیر
مکاننما
وجود داشته
باشد
delete-charرا اجرا میکند یا در صورت خالی بودن خطend-of-fileرا انجام میدهد. همچنین ببینید:delete-char-or-list-or-eof. رفتار مکاننما توسطvimodeتغییر میکند. delete-char-or-list(متصلنشده)- اگر
نویسهای
زیر
مکاننما
باشد
delete-charرا انجام میدهد یا در انتهای خطlist-choicesرا اجرا میکند. همچنین ببینید:delete-char-or-list-or-eof. delete-char-or-list-or-eof(^D)- اگر
نویسهای
زیر
مکاننما
باشد
delete-charرا انجام میدهد، در انتهای خطlist-choicesو در یک خط خالیend-of-fileرا اجرا میکند. همچنین این سه دستور را که هر کدام تنها یک عمل را انجام میدهند، وdelete-char-or-eof ،delete-char-or-listوlist-or-eofرا که هر یک دو عمل مختلف از این سه عمل را انجام میدهند، ببینید. delete-word(M-d,M-D)- از
مکاننما
تا انتهای
کلمهٔ فعلی
را برش
میدهد (Cut) - و
در بافر برش
ذخیره
میکند.
رفتار مرز
کلمه توسط
vimodeتغییر مییابد. down-history(down,^N)- مانند
up-history ،اما به سمت پایین حرکت میکند و در خط ورودی اولیه متوقف میشود. downcase-word(M-l,M-L)- نویسهها
را از
مکاننما
تا انتهای
کلمهٔ فعلی
به حروف
کوچک تبدیل
میکند.
رفتار مرز
کلمه توسط
vimodeتغییر مییابد. end-of-file(متصلنشده)- یک پایان
فایل (EOF) را
مخابره
میکند که
باعث خروج
شل میشود،
مگر اینکه
متغیر شل
ignoreeofبرای جلوگیری از این کار تنظیم شده باشد. همچنین ببینید:delete-char-or-list-or-eof. end-of-line(^E,end)- مکاننما
را به
انتهای خط
منتقل
میکند.
رفتار
مکاننما
توسط
vimodeتغییر مییابد. expand-history(M-space)- جایگزینیهای
تاریخچه را
در کلمهٔ
جاری بسط
میدهد.
ببینید
History substitution.
همچنین
ببینید
magic-space,toggle-literal-history, و متغیر شلautoexpand. expand-glob(^X-*)- الگوی glob در سمت چپ مکاننما را بسط میدهد. ببینید Filename substitution.
expand-line(کلید مقید نشده)- مانند
expand-history, اما جایگزینیهای تاریخچه را در هر کلمه از بافر ورودی بسط میدهد. expand-variables(^X-$)- متغیر موجود در سمت چپ مکاننما را بسط میدهد. ببینید Variable substitution.
forward-char(^F,right)- یک نویسه به
جلو حرکت
میکند.
رفتار
مکاننما
توسط
vimodeتغییر مییابد. forward-word(M-f,M-F)- به انتهای
کلمهٔ جاری
به سمت جلو
حرکت
میکند. مرز
کلمه و
رفتار
مکاننما
توسط
vimodeتغییر مییابد. history-search-backward(M-p,M-P)- در فهرست
تاریخچه به
سمت عقب به
دنبال
دستوری
میگردد که
با محتوای
جاری بافر
ورودی تا
مکاننما
آغاز شود و
آن را در
بافر ورودی
کپی میکند.
رشتهٔ
جستجو
میتواند
یک الگوی glob
باشد
(ببینید
Filename substitution)
شامل
‘
*’, ‘?’, ‘[]’, یا ‘{}’. دستورهایup-historyوdown-historyاز نقطهٔ مناسب در فهرست تاریخچه ادامه خواهند یافت. فقط در حالت Emacs. همچنین ببینیدhistory-search-forwardوi-search-back. history-search-forward(M-n,M-N)- مانند
history-search-backward ،اما به سمت جلو جستجو میکند. i-search-back(مقید نشده)- مانند
history-search-backwardبه سمت عقب جستجو میکند، اولین تطابق را با قرار دادن مکاننما در انتهای الگو، در بافر ورودی کپی میکند و اعلانی به شکلبه همراه اولین تطابق نمایش میدهد. نویسههای بیشتری میتوان تایپ کرد تا جستجو گسترش یابد،bck:i-search-backرا میتوان دوباره تایپ کرد تا جستجو با همان الگو ادامه یابد و در صورت نیاز از انتهای تاریخچه دور بزند، (i-search-backبرای کارکردن این ویژگی باید به یک نویسهٔ منفرد مقید شده باشد) یا یکی از نویسههای خاص زیر را میتوان تایپ کرد:- کلید
- رفتار
^W- بقیه کلمه زیر مکاننما را به الگوی جستجو الصاق میکند.
delete(یا هر نویسهٔ مقید شده بهbackward-delete-char)- اثر آخرین نویسهٔ تایپشده را برمیگرداند و در صورت مناسب بودن، یک نویسه را از الگوی جستجو حذف میکند.
^G- اگر جستجوی قبلی موفقیتآمیز بوده باشد، کل جستجو را لغو میکند. در غیر این صورت، به آخرین جستجوی موفقیتآمیز برمیگردد.
escape- جستجو را پایان میدهد و خط فعلی را در بافر ورودی باقی میگذارد.
هر نویسه دیگری که به
self-insert-commandمقید نشده باشد، به جستجو خاتمه میدهد، خط فعلی را در بافر ورودی باقی میگذارد و سپس به عنوان ورودی عادی تفسیر میشود. به طور ویژه، بازگشت مکاننما (carriage return) باعث اجرای خط فعلی میشود. همچنین ببینیدi-search-fwdوhistory-search-backward. رفتار مرز کلمات توسطvimodeتغییر مییابد. i-search-fwd(متصلنشده)- مانند
i-search-back ،اما به سمت جلو جستجو میکند. رفتار مرز کلمات توسطvimodeتغییر مییابد. insert-last-word(M-_)- آخرین کلمه
از خط ورودی
قبلی
(‘
!$’) را در بافر ورودی درج میکند. همچنین نگاه کنید بهcopy-prev-word. list-choices(M-^D)- احتمالات
تکمیل را
همانطور
که در
تکمیل
و
فهرستبندی
(+) توضیح
داده شده،
فهرست
میکند.
همچنین
نگاه کنید
به
delete-char-or-list-or-eofوlist-choices-raw. list-choices-raw(^X-^D)- مانند
list-choices ،اما تکمیلهای تعریفشده توسط کاربر را نادیده میگیرد. list-glob(^X-g,^X-G)- تطابقها
با الگوی glob
(نگاه کنید
به
جایگزینی
نام فایل)
در سمت چپ
نشانگر را
(از طریق
دستور
داخلی
ls-F) فهرست میکند. list-or-eof(متصلنشده)- عمل
list-choicesرا انجام میدهد یا در یک خط خالیend-of-fileرا اعمال میکند. همچنین نگاه کنید بهdelete-char-or-list-or-eof. magic-space(متصلنشده)- جایگزینیهای
تاریخچه در
خط فعلی را
گسترش
میدهد،
مانند
expand-history ،و یک فاصله درج میکند.magic-spaceبرای اتصال به کلید فاصله (space bar) طراحی شده است، اما بهطور پیشفرض متصل نیست. normalize-command(^X-?)- کلمه فعلی
را در
PATHجستجو میکند و در صورت پیدا شدن، آن را با مسیر کامل فایل اجرایی جایگزین مینماید. نویسههای خاص نقلقول (کوتیشنگذاری) میشوند. نامهای مستعار (aliases) بسط داده شده و نقلقول میشوند، اما دستورات درون نامهای مستعار بسط نمییابند. این دستور برای دستوراتی که دستورات دیگر را به عنوان آرگومان میپذیرند مفید است؛ مانند ‘dbx’ و ‘sh -x’. normalize-path(^X-n,^X-N)- کلمه فعلی
را
همانطور
که در بخش
تنظیم
‘
expand’ از متغیر پوستهsymlinksتوضیح داده شده است، بسط میدهد. overwrite-mode(بدون کلید انتسابی)- حالت را بین درج (ورودی) و بازنویسی (overwrite) جابهجا میکند.
run-fg-editor(M-^Z)- خط ورودی
فعلی را
ذخیره کرده
و به دنبال
یک کار
متوقفشده
(stopped job) میگردد
که بخش نام
فایلِ
اولین کلمه
آن در متغیر
پوسته
editorsیافت شود. اگرeditorsتنظیم نشده باشد، بخش نام فایلِ متغیر محیطیEDITOR(‘ed’ در صورت تنظیم نبودن) و متغیر محیطیVISUAL(‘vi’ در صورت تنظیم نبودن) استفاده خواهند شد. اگر چنین کاری یافت شود، مجدداً اجرا میشود، گویی دستور ‘fg %job’ تایپ شده است. این قابلیت برای جابهجایی آسان بین یک ویرایشگر و پوسته به کار میرود. برخی افراد این دستور را به^Zمتصل میکنند تا بتوانند این کار را حتی سادهتر انجام دهند. run-help(M-h,M-H)- به دنبال
مستندات
مربوط به
دستور جاری
میگردد،
با همان
برداشتی از
“دستور
جاری” که در
روالهای
تکمیل
خودکار
استفاده
میشود، و
آن را چاپ
میکند. هیچ
راهی برای
استفاده از
یک
صفحهبندیکننده
(pager) وجود
ندارد؛
run-helpبرای فایلهای راهنمای کوتاه طراحی شده است. اگر نام مستعار ویژهhelpcommandتعریف شده باشد، با نام دستور به عنوان تنها آرگومان اجرا میشود. در غیر این صورت، مستندات باید در فایلی با نام command.help ، command.1 ، command.6 ، command.8 ، یا command قرار داشته باشند، که باید در یکی از دایرکتوریهای فهرستشده در متغیر محیطیHPATHباشد. اگر بیش از یک فایل راهنما وجود داشته باشد، فقط اولین فایل چاپ میشود. self-insert-command(نویسههای متنی)- در حالت درج
(پیشفرض)،
نویسه
تایپشده
را پس از
نویسه زیر
مکاننما
در خط ورودی
وارد
میکند. در
حالت
بازنویسی
(overwrite)، نویسه
زیر
مکاننما
را با نویسه
تایپشده
جایگزین
میکند.
حالت ورودی
معمولاً
بین خطوط
حفظ
میشود،
اما متغیر
پوسته
inputmodeرا میتوان روی ‘insert’ یا ‘overwrite’ تنظیم کرد تا ویرایشگر در ابتدای هر خط در آن حالت قرار گیرد. همچنین ببینید:overwrite-mode. sequence-lead-in(پیشوند کلید جهتنما ، پیشوند meta ،^X)- نشان
میدهد که
نویسههای
بعدی بخشی
از یک توالی
چندکلیدی
هستند.
اتصال یک
دستور به یک
توالی
چندکلیدی
در واقع دو
اتصال
ایجاد
میکند:
نویسه اول
به
sequence-lead-inو کل توالی به آن دستور. تمام توالیهایی که با یک نویسه متصلشده بهsequence-lead-inآغاز میشوند، عملاً بهundefined-keyمتصل هستند مگر اینکه به دستور دیگری متصل شده باشند. spell-line(M-$)- تلاش
میکند
املای هر
کلمه در
بافر ورودی
را مانند
spell-wordتصحیح کند، اما کلماتی را که کاراکتر اول آنها یکی از ‘- ،’ ‘! ،’ ‘^’ یا ‘%’ باشد، یا شامل ‘\ ،’ ‘*’ یا ‘?’ باشند نادیده میگیرد تا از بروز مشکل در سوییچها، جایگزینیها و موارد مشابه جلوگیری شود. بخش تصحیح املا (+) را ببینید. spell-word(M-s,M-S)- تلاش میکند املای کلمه فعلی را همانطور که در تصحیح املا (+) شرح داده شده تصحیح کند. هر بخش از کلمهای را که شبیه به یک مسیر فایل به نظر برسد بررسی میکند.
toggle-literal-history(M-r,M-R)- جایگزینیهای
تاریخچه در
بافر ورودی
را باز (expand) یا
به حالت
اولیه
برمیگرداند
(unexpand). همچنین
expand-historyو متغیر شلautoexpandرا ببینید. undefined-key(هر کلید مقیدنشده)- بوق میزند.
up-history(up,^P)- مورد قبلی
در فهرست
تاریخچه را
در بافر
ورودی کپی
میکند. اگر
histlitتنظیم شده باشد، از شکل لفظی (literal) ورودی استفاده میکند. میتواند برای پیمایش به سمت بالای فهرست تاریخچه تکرار شود، و در ابتدای آن متوقف میشود. upcase-word(M-u,M-U)- نویسههای
از
مکاننما
تا انتهای
کلمه فعلی
را به حروف
بزرگ تبدیل
میکند.
رفتار مرز
کلمه توسط
vimodeتغییر مییابد. vi-beginning-of-next-word(مقید نشده)- در Vi به
ابتدای
کلمه بعدی
میرود.
رفتار مرز
کلمه و
مکاننما
توسط
vimodeتغییر مییابد. vi-eword(کلید مقید نشده)- حرکت در
حالت Vi به
انتهای
کلمهٔ فعلی.
رفتار مرز
کلمات توسط
vimodeتغییر میکند. vi-search-back(?)- با اعلان
یک رشتهٔ جستجو را درخواست میکند (که مانند
?history-search-backwardمیتواند یک الگوی glob باشد)، آن را جستجو کرده و در بافر ورودی کپی میکند. اگر هیچ موردی یافت نشود، زنگ هشدار به صدا درمیآید. فشردن کلید return به جستجو پایان داده و آخرین تطابق را در بافر ورودی باقی میگذارد. فشردن کلید escape به جستجو پایان داده و تطابق را اجرا میکند. فقط در حالتvi. vi-search-fwd(/)- مانند
vi-search-back ،اما رو به جلو جستجو میکند. which-command(M-?)- دستور
which(به توضیحات دستور توکار مراجعه کنید) را روی اولین کلمه از بافر ورودی اجرا میکند. yank-pop(M-y)- هنگامی که
بلافاصله
پس از یک
yankیا یکyank-popدیگر اجرا شود، رشتهٔ جایگذاریشده را با رشتهٔ قبلی بعدی از killring جایگزین میکند. این کار همچنین اثر چرخش killring را دارد، به طوری که این رشته توسط دستورyankبعدی به عنوان تازهترین رشتهٔ حذفشده در نظر گرفته خواهد شد. تکرارyank-popحلقهٔ killring را به هر تعداد بار میچرخاند.
ساختار لغوی (Lexical structure)
پوسته
خطوط ورودی
را در
فاصلهها و
تبها به
کلمات
تقسیم
میکند.
نویسههای
ویژهٔ ‘&
،’ ‘| ،’
‘; ،’
‘< ،’
‘> ،’
‘( ،’ و
‘) ،’ و
نویسههای
دوتایی
‘&& ،’
‘|| ،’
‘<< ،’ و
‘>>’
همیشه
کلمات
جداگانهای
هستند، چه
با
فاصلههای
خالی احاطه
شده باشند و
چه نباشند.
هنگامی که
ورودی
پوسته یک
ترمینال
نباشد،
نویسه
‘#’ به
عنوان آغاز
یک توضیح (comment)
در نظر
گرفته
میشود. هر
‘#’ و
باقی خط
ورودی که در
آن ظاهر شده
است، پیش از
تجزیه
بیشتر
نادیده
گرفته و دور
ریخته
میشود.
میتوان
با قرار
دادن یک
بکاسلش
(‘\’) پیش
از یک نویسه
خاص (از جمله
فاصله یا tab)
یا محصور
کردن آن در
نقلقولهای
تکی (‘'
،’) دوگانه
(‘"’) یا
وارونه (‘`
،’) از
تفسیر
معنای خاص
آن جلوگیری
کرد و
احتمالاً
آن را بخشی
از یک کلمه
دیگر ساخت.
در حالتی که
نقلقول
دیگری وجود
نداشته
باشد، یک خط
جدید که پیش
از آن ‘\’
آمده باشد
معادل یک
فاصله است،
اما درون
نقلقولها
این توالی
به یک خط
جدید منجر
میشود.
علاوه بر
این،
میتوان از
تمام
جایگزینیها
(Substitutions) به جز
جایگزینی
تاریخچه (History
substitution) با محصور
کردن
رشتهها (یا
بخشهایی
از رشتهها)
که در آن
ظاهر
میشوند در
نقلقولهای
تکی، یا با
نقلقول
کردن
نویسه(های)
حیاتی
(مانند
‘$’ یا
‘`’ به
ترتیب برای
جایگزینی
متغیر (Variable substitution)
یا
جایگزینی
دستور (Command substitution))
توسط ‘\’
جلوگیری
کرد.
(جایگزینی
نام مستعار
(Alias substitution) نیز
مستثنی
نیست:
نقلقول
کردن هر
نویسهای
از کلمهای
که برای آن
یک alias
تعریف شده
است به هر
روشی، مانع
از
جایگزینی
آن نام
مستعار
میشود. روش
معمول برای
نقلقول
کردن یک نام
مستعار،
قرار دادن
یک بکاسلش
پیش از آن
است.) از
جایگزینی
تاریخچه (History
substitution) توسط
بکاسلش
جلوگیری
میشود اما
با
نقلقولهای
تکی خیر.
رشتههای
محصور در
نقلقولهای
دوگانه یا
وارونه
مشمول
جایگزینی
متغیر (Variable substitution)
و
جایگزینی
دستور (Command substitution)
میشوند،
اما از سایر
جایگزینیها
جلوگیری به
عمل
میآید.
متن داخل گیومههای تکی (کوتیشن) یا دوتایی (دابل کوتیشن) به یک کلمه واحد (یا بخشی از آن) تبدیل میشود. نویسههای متا (metacharacters) در این رشتهها، از جمله فاصلهها و تبها، کلمات جداگانه تشکیل نمیدهند. تنها در یک حالت خاص (نگاه کنید به جایگزینی دستور) یک رشته داخل دابل کوتیشن میتواند بخشهایی از بیش از یک کلمه را تولید کند؛ رشتههای داخل کوتیشن تکی هرگز چنین نمیکنند. بکتیکها (گیومه وارونه) ویژه هستند: آنها نشاندهنده جایگزینی دستور هستند، که ممکن است به بیش از یک کلمه منجر شود.
دنبالههای
گریز (escape sequences) به
سبک C را
میتوان در
رشتههای
داخل
کوتیشن تکی
با قرار
دادن ‘$’
قبل از
گیومه
ابتدایی
استفاده
کرد. (+) برای
فهرست
کاملی از
دنبالههای
گریز
شناختهشده،
به
دنبالههای
گریز (+)
مراجعه
کنید.
نقلقول کردن رشتههای پیچیده، بهویژه رشتههایی که خود حاوی نویسههای نقلقول هستند، میتواند گیجکننده باشد. به یاد داشته باشید که نیازی نیست گیومهها همانطور که در نوشتار انسانی به کار میروند استفاده شوند! شاید آسانتر باشد که نه کل یک رشته، بلکه فقط آن بخشهایی از رشته را که نیاز به نقلقول دارند نقلقول کنید و در صورت نیاز از انواع مختلف نقلقول برای این کار استفاده نمایید.
متغیر
پوسته
backslash_quote
میتواند
تنظیم شود
تا
بکاسلشها
همیشه ‘\
،’ ‘'’ و
‘"’ را
نقلقول
کنند (+). این
ممکن است
کارهای
پیچیده
نقلقول را
آسانتر
کند، اما
میتواند
باعث
خطاهای
نحوی در
اسکریپتهای
csh(1) شود.
دنبالههای گریز (+)
دنبالههای
گریز زیر
همیشه در
داخل
رشتهای که
با استفاده
از ‘$''’
ساخته شده
است شناخته
میشوند، و
همچنین
بهصورت
اختیاری
توسط دستور
توکار echo
به شکلی که
توسط متغیر
پوسته echo_style
کنترل
میشود،
شناسایی
میگردند.
توالیهای گریز پشتیبانیشده عبارتند از:
- گریز
- توضیحات
\a- زنگ (Bell).
\b- پسبر (Backspace).
\cc- نویسه
کنترلی که
با
‘
^c’ در stty(1) مشخص میشود. اگر c یک بکاسلش باشد، باید دو بار تکرار شود. \e- گریز (Escape).
\f- برگهخور (Form feed).
\n- خط جدید (Newline).
\r- بازگشت به ابتدای سطر (Carriage return).
\t- تب افقی (Horizontal tab).
\v- تب عمودی (Vertical tab).
\\- بکاسلش صریح.
\'- نقلقول تکی صریح.
\"- نقلقول دوتایی صریح.
\nnn- نویسه متناظر با عدد هشتهشتی nnn.
\xnn- نویسه متناظر با عدد شانزدهشانزدهی nn (۱-۲ رقم شانزدهشانزدهی).
\x{nnnnnnnn}- نویسه متناظر با عدد شانزدهشانزدهی nnnnnnnn (۱-۸ رقم شانزدهشانزدهی).
\unnnn- نقطه کد یونیکد nnnn (۱-۴ رقم شانزدهشانزدهی).
\Unnnnnnnn- نقطه کد یونیکد nnnnnnnn (۱ تا ۸ رقم در مبنای شانزده).
پیادهسازیهای
‘\x ،’
‘\u’ و
‘\U’ در
سایر
پوستهها
ممکن است
تعداد
ارقام
متفاوتی را
بپذیرند.
اغلب
امنترین
روش این است
که از
صفرهای
پیشرو
برای ارائه
حداکثر
تعداد
ارقام مورد
انتظار
استفاده
شود.
جایگزینیها
اکنون تبدیلات گوناگونی را که پوسته به ترتیبی که رخ میدهند بر روی ورودی اعمال میکند، شرح میدهیم. همچنین ضمن کار، به ساختارهای دادهٔ دخیل و دستورها و متغیرهایی که بر آنها اثر میگذارند اشاره میکنیم. به یاد داشته باشید که میتوان با نقلقولگذاری همانطور که در ساختار لغوی توضیح داده شده، از جایگزینیها جلوگیری کرد.
جایگزینی تاریخچه
هر دستور
یا
“رویداد”
که از
ترمینال
وارد
میشود، در
فهرست
تاریخچه
ذخیره
میگردد.
دستور
پیشین
همواره
ذخیره
میشود، و
میتوان
متغیر
پوستهای
history را روی
یک عدد
تنظیم کرد
تا همان
تعداد
دستور
ذخیره شود.
متغیر
پوستهای
histdup را
میتوان
بهگونهای
تنظیم کرد
که
رویدادهای
تکراری یا
رویدادهای
تکراریِ
متوالی
ذخیره
نشوند.
دستورهای
ذخیرهشده
از ۱ به
ترتیب
شمارهگذاری
شده و برچسب
زمانی
میخورند.
معمولاً
نیازی به
استفاده از
شماره
رویدادها
نیست، اما
میتوان
شماره
رویداد
فعلی را با
قرار دادن
یک ‘!’ در
متغیر
پوستهای
prompt به
بخشی از
اعلان
پوسته
تبدیل کرد.
بهطور
پیشفرض،
ورودیهای
تاریخچه با
چاپ هر
توکنِ
تجزیهشده
به صورت
جداشده با
فاصله
نمایش
مییابند؛
بنابراین
عملگر
تغییر مسیر
‘>&!’
بهصورت
‘> & !’
نمایش داده
خواهد شد.
پوسته در
واقع
تاریخچه را
به هر دو شکل
بسطیافته
و
تحتاللفظی
(بسطنیافته)
ذخیره
میکند. اگر
متغیر
پوستهای
histlit تنظیم
شده باشد،
دستورهایی
که تاریخچه
را نمایش
داده یا
ذخیره
میکنند،
از شکل
تحتاللفظی
استفاده
خواهند
کرد.
دستور
توکار history
میتواند
در هر زمان
فهرست
تاریخچه را
چاپ کند، در
یک فایل
ذخیره کند،
بازیابی
نماید یا آن
را پاک کند؛
همچنین
متغیرهای
پوستهای
savehist و histfile
را میتوان
طوری تنظیم
کرد که
فهرست
تاریخچه
بهطور
خودکار
هنگام خروج
(logout) ذخیره و
هنگام ورود
(login) بازیابی
شود.
جایگزینیهای تاریخچه (History substitutions) کلماتی از فهرست تاریخچه را وارد جریان ورودی میکنند؛ امری که تکرار دستورها، تکرار آرگومانهای یک دستور قبلی در دستور فعلی، یا تصحیح اشتباهات املایی در دستور پیشین را با کمترین تایپ و سطح اطمینان بالا آسان میسازد.
جایگزینیهای
تاریخچه با
نویسه
‘!’ آغاز
میشوند.
آنها
میتوانند
در هر
نقطهای از
جریان
ورودی شروع
شوند، اما
به صورت
تودرتو
قرار
نمیگیرند.
میتوان
پیش از
‘!’ یک
‘\’ قرار
داد تا از
معنای ویژه
آن جلوگیری
شود؛ برای
سهولت، اگر
پس از ‘!’
یک نویسه
فاصله (blank)، تب
(tab)، خط جدید
(newline)، ‘=’ یا
‘(’
بیاید،
بدون تغییر
عبور داده
میشود.
جایگزینیهای
تاریخچه
همچنین
زمانی رخ
میدهند که
یک خط ورودی
با ‘^’
آغاز شود؛
نگاه کنید
به
History substitution
abbreviation.
نویسههایی
که برای
نشان دادن
جایگزینی
تاریخچه
استفاده
میشوند
(‘!’ و
‘^’) را
میتوان با
تنظیم
متغیر
پوسته histchars
تغییر داد.
هر خط ورودی
که حاوی یک
جایگزینی
تاریخچه
باشد، پیش
از اجرا چاپ
میشود.
یک جایگزینی تاریخچه میتواند دارای یک “مشخصکننده رویداد (event specification)” (نگاه کنید به History event specification) باشد که رویدادی را مشخص میکند که کلمات باید از آن گرفته شوند، یک “تعیینکننده کلمه (word designator)” (نگاه کنید به History word designators) که کلمات خاصی را از رویداد انتخابشده برمیگزیند، و/یا یک “تغییردهنده کلمه (word modifier)” (نگاه کنید به History word modifiers) که کلمات انتخابشده را دستکاری میکند.
مشخصسازی رویداد تاریخچه
یک
مشخصسازی
رویداد
تاریخچه
میتواند
یکی از
موارد زیر
باشد (به
همراه
نویسه
جایگزینی
تاریخچه
‘!’ که
نمایش داده
شده است):
- !Event
- مشخصسازی رویداد تاریخچه
!n- یک عدد، که به یک رویداد خاص اشاره میکند.
!-n- یک آفست، که به رویداد n قبل از رویداد کنونی اشاره دارد.
!#- رویداد
کنونی. این
مورد باید
در csh(1)
با احتیاط
استفاده
شود، چرا که
هیچ بررسی
برای
بازگشت
(تکرار
بازگشتی) در
آن وجود
ندارد.
tcshامکان ۱۰ سطح از بازگشت را میدهد. (+) !!- رویداد
قبلی،
معادل
‘
!-1’. !s- تازهترین رویدادی که اولین کلمه آن با رشته s شروع میشود.
!?s?- تازهترین
رویدادی که
شامل رشته
s باشد.
دومین
‘
?’ در صورتی که بلافاصله یک خط جدید بهدنبال آن بیاید، میتواند حذف شود.
برای مثال، این بخش از لیست تاریخچه یک کاربر را در نظر بگیرید:
9 8:30 nroff -man wumpus.man 10 8:31 cp wumpus.man wumpus.man.old 11 8:36 vi wumpus.man 12 8:37 diff wumpus.man.old wumpus.man
دستورها به همراه شماره رویداد و برچسب زمان آنها نشان داده شدهاند. رویداد کنونی، که هنوز آن را تایپ نکردهایم، رویداد ۱۳ است.
تایپ کردن
!11!-2تایپ کردن
!!!!’
میتواند
به صورت
‘!’
خلاصه شود
اگر بعد از
آن ‘:’
بیاید، که
در History word
designators و History
word modifiers شرح داده
شده است.
تایپ کردن
!nn’
شروع
میشود.
تایپ کردن
!?old?old’
است.
بدون تعیینکنندهها یا تغییردهندههای کلمه، ارجاعات تاریخچه صرفاً به کل رویداد بسط مییابند، بنابراین میتوانیم بنویسیم
!cpcp’
(رویداد ۱۰)
دوباره
اجرا شود یا
!!|morediff’ در
رویداد
قبلی (۱۲) از
بالای صفحه
خارج شده
باشد.
ارجاعات
تاریخچه را
میتوان در
صورت نیاز
با استفاده
از آکولاد
(‘{’ و
‘}’) از
متن اطراف
جدا کرد. به
عنوان
مثال،
!vdocvdoc’
شروع شود، و
در این
مثال، چیزی
پیدا
نمیکند،
اما
!{v}docvi wumpus.mandoc’
بسط
مییابد.
حتی درون
آکولادها،
جایگزینیهای
تاریخچه
تودرتو
نمیشوند.
(+) در حالی که csh(1) به عنوان مثال،
!3dd’
الحاقشده
به آن بسط
میدهد،
tcsh آن را
به آخرین
رویدادی که
با ‘3d’
شروع
میشود بسط
میدهد؛
تنها
آرگومانهای
کاملاً
عددی به
عنوان
شماره
رویداد در
نظر گرفته
میشوند.
این امر
فراخوانی
رویدادهایی
که با اعداد
شروع
میشوند را
امکانپذیر
میسازد.
برای بسط
دادن
!3d!{3}dتعیینکنندههای کلمه تاریخچه (History word designators)
برای
انتخاب
کلمات از یک
رویداد،
میتوانیم
مشخصه
رویداد را
با یک ‘:’
و یک
تعیینکننده
برای کلمات
مورد نظر
دنبال کنیم.
کلمات یک خط
ورودی از ۰
شمارهگذاری
میشوند،
که کلمه اول
(معمولاً
دستور) ۰،
کلمه دوم
(اولین
آرگومان) ۱ و
غیره است.
تعیینکنندههای
پایه کلمه
به شرح زیر
هستند،
همراه با
ستونهایی
برای یک
‘:’
پیشرو و یک
‘!’
پیشرو (برای
تعیینکنندههای
مختصر کلمه -
بخش
History substitution
abbreviation را
ببینید):
| :Word | !Word | تعیینکننده کلمه تاریخچه |
:0 |
اولین کلمه (دستور). | |
:n |
آرگومان n-اُم. | |
:^ |
!^ |
اولین
آرگومان،
معادل با
‘:1’.
|
:$ |
!$ |
آخرین آرگومان. |
:% |
!% |
کلمهای
که با
جستجوی
?s?
مطابقت
داده شده
است.
|
:x-y |
محدودهای از کلمات. | |
:-y |
!-y |
معادل با
‘:0-y’.
|
:* |
!* |
معادل با
‘:^-$ ،’
اما اگر
رویداد
تنها شامل ۱
کلمه باشد،
چیزی
برنمیگرداند.
|
:x* |
معادل با
‘:x-$’.
|
|
:x- |
معادل با
‘:x*
،’ اما با
حذف آخرین
کلمه
(‘$’).
|
|
:- |
معادل با
‘:0- ؛’
دستور و
تمام
آرگومانها
به جز آخرین
آرگومان. |
کلمات انتخابشده با فاصلههای تکی از یکدیگر در خط فرمان درج میشوند.
بهعنوان
مثال،
دستور
‘diff’
(رویداد ۱۲)
در مثال
لیست
تاریخچه در
History event
specification ،
diff wumpus.man.old
wumpus.mandiff !!:1.old !!:1:1’ برای
انتخاب
آرگومان
اول از
رویداد
قبلی) یا
diff !-2:2 !-2:1cp’
(رویداد ۱۰).
اگر ترتیب
‘diff’ برای
ما اهمیتی
نداشت،
میتوانستیم
تایپ کنیم
diff !-2:1-2diff !-2:*دستور
‘cp’
(رویداد ۱۰)
میتوانست
به صورت
cp wumpus.man !#:1.old#’
برای ارجاع
به رویداد
جاری تایپ
شود.
تایپ کردن
!n:- hurkle.mannroff’
(رویداد ۹) را
دوباره
استفاده
میکند تا
به
nroff -man hurkle.manکاراکتر
‘:’ که
مشخصکنندهٔ
رویداد را
از
تعیینکنندهٔ
کلمه جدا
میکند، در
صورتی که
گزینشگر
آرگومان با
‘^ ،’
‘$ ،’
‘% ،’
‘- ،’ یا
‘*’ آغاز
شود،
میتواند
حذف گردد.
برای
مثال،
دستور
‘diff’ ما
(رویداد ۱۲)
میتوانست
به صورت
diff !!^.old !!^diff !!$.old !!$!!’
به ‘!’
خلاصه شود،
یک
گزینشگر
آرگومان که
با ‘-’
شروع
میشود، به
عنوان
مشخصکنندهٔ
رویداد
تفسیر
خواهد شد.
یک مرجع تاریخچه ممکن است دارای یک مشخصکننده کلمه باشد اما هیچ رویداد مشخصی را تعیین نکند. در این صورت، به دستور قبلی ارجاع میدهد.
در ادامه
مثال دستور
‘diff’
(رویداد ۱۲)،
میتوانستیم
به سادگی
تایپ کنیم
diff !^.old !^diff !*اصلاحکنندههای کلمه در تاریخچه (History word modifiers)
کلمه یا
کلمات
موجود در یک
ارجاع
تاریخچه را
میتوان
ویرایش یا
“اصلاح”
کرد، با
قرار دادن
یک یا چند
اصلاحکننده
پس از آن
(همراه با
‘:’
آغازین
نمایشدادهشده)،
که هر یک با
یک ‘:’
شروع
میشوند:
- :Word
- اصلاحکننده کلمه تاریخچه
:h- حذف بخش انتهایی مسیر، و باقی گذاشتن ابتدای آن (head).
:t- حذف تمام بخشهای ابتدایی مسیر، و باقی گذاشتن انتهای آن (tail).
:r- حذف پسوند نام فایل ‘.xxx ،’ و باقی گذاشتن نام ریشه (root name).
:e- حذف همهچیز به جز پسوند.
:u- تبدیل اولین حرف کوچک به حرف بزرگ.
:l- تبدیل اولین حرف بزرگ به حرف کوچک.
:s/l/r/- جایگزینی
r به جای
l. عبارت
l صرفاً
یک رشته است
درست مانند
r ، نه یک
عبارت منظم
(regular expression) نظیر
آنچه در
دستور
همنام
ed(1)
وجود دارد.
هر
نویسهای
میتواند
به عنوان
جداکننده
به جای
‘
/’ استفاده شود؛ یک ‘\’ میتواند برای نقلقول (quote) کردن جداکننده در داخل l و r به کار رود. نویسه ‘&’ در r با l جایگزین میشود؛ ‘\’ همچنین ‘&’ را نقلقول میکند. اگر l خالی باشد (‘) ،’ از l مربوط به یک جایگزینی قبلی یا s از یک جستجوی قبلی یا شماره رویداد در مشخصات رویداد استفاده میشود. در صورتی که بلافاصله پس از جداکننده انتهایی یک خط جدید بیاید، میتوان آن را حذف کرد. :&- تکرار جایگزینی قبلی.
:g- اعمال اصلاحگر بعدی یکبار روی هر کلمه.
:a(+)- اعمال
اصلاحگر
بعدی به
بیشترین
تعداد
دفعات ممکن
روی یک کلمه
منفرد.
‘
:a’ و ‘:g’ میتوانند با هم برای اعمال سراسری یک اصلاحگر استفاده شوند. با اصلاحگر ‘:s’, تنها الگوهایی که در کلمه اصلی وجود دارند جایگزین میشوند، نه الگوهایی که شامل نتیجهٔ هیچ جایگزینی دیگری هستند. :p- چاپ خط فرمان جدید بدون اجرای آن.
:q- نقلقول کردن کلمات جایگزینشده، جهت جلوگیری از جایگزینیهای بعدی.
:Q- مشابه
‘
:q’ است اما افزون بر آن متغیرهای خالی را به صورت یک رشته حاوی NUL حفظ میکند. این مورد برای مثال جهت حفظ آرگومانهای مکانی مفید است:> set args=('arg 1' '' 'arg 3') > tcsh -f -c 'echo ${#argv}' $args:gQ 3 :x- مشابه
‘
:q’, اما شکستن به کلمات در محل فاصلهها، تبها و خطوط جدید.
اصلاحگرها
تنها روی
اولین
کلمهٔ قابل
اصلاح
اعمال
میشوند
(مگر اینکه
‘:g’
استفاده
شده باشد).
قابل اصلاح
نبودن هیچ
کلمهای یک
خطا محسوب
میشود.
به عنوان
مثال،
دستور
‘diff’
(رویداد ۱۲)
در مثال
فهرست
تاریخچه در
مشخصات
رویداد
تاریخچه (History event
specification),
diff wumpus.man.old
wumpus.mandiff wumpus.man.old
!#^:r:r’
برای حذف
‘.old’ از
اولین
آرگومان
روی همان خط
(‘!#^’)
نوشته شود.
میتوانیم دستور
echo hello out thereecho !*:uhello ،’
دستور
echo !*:auHELLO ،’ یا
echo !*:aguممکن است پس از دستور
mail -s "I forgot my
password" rot!:s/rot/rootroot’ وارد
نماییم
(برای
روشهای
دیگر،
تغییردهندههای
کلمات
تاریخچه (History word
modifiers) و
تصحیح
املا (+) (Spelling correction (+))
را ببینید).
(+) در csh(1)
به این
صورت، تنها
یک
تغییردهنده
میتواند
روی هر
گسترش
تاریخچه یا
متغیر
اعمال شود.
در ،
میتوان
بیش از یکی
را به کار
برد؛ برای
مثال:
% mv wumpus.man /usr/share/man/man1/wumpus.1 % man !$:t:r man wumpus
در csh(1) نتیجه به صورت زیر خواهد بود:
wumpus.1:rیک
جایگزینی
که به دنبال
آن یک ‘:’
میآید،
ممکن است
نیاز باشد
با استفاده
از
آکولادها
از آن مجزا
شود:
> mv a.out /usr/games/wumpus
> setenv PATH !$:h:$PATH
Bad ! modifier: $.
> setenv PATH !{-2$:h}:$PATH
setenv PATH /usr/games:/bin:/usr/bin:.
تلاش نخست
در csh(1)
موفقیتآمیز
خواهد بود
اما در tcsh
شکست
میخورد،
زیرا tcsh
پس از دومین
‘:’
انتظار یک
تغییردهنده
دیگر را به
جای ‘$’
دارد.
اختصار جایگزینی تاریخچه (History substitution abbreviation)
یک اختصار
ویژه برای
جایگزینیها
وجود دارد؛
‘^ ،’
هنگامی که
نخستین
نویسه در یک
خط ورودی
باشد،
معادل
‘!:s^’ است.
بنابراین،
میتوانیم
مثال بخش
تغییردهندههای
کلمه
تاریخچه (History word
modifiers)
mail -s "I forgot my
password" rot^rot^root!’ آغاز
نمیشود.
دستورهای ویرایشگر تاریخچه (History editor commands)
در نهایت،
علاوه بر
جایگزینیهایی
که پیشتر
شرح داده
شد،
میتوان از
طریق
ویرایشگر
نیز به
تاریخچه
دسترسی
پیدا کرد.
دستورهای
ویرایشگر
up-history و down-history
، history-search-backward و
history-search-forward ،
i-search-back و i-search-fwd
، vi-search-back و
vi-search-fwd ،
copy-prev-word و
insert-last-word به
جستجوی
رویدادها
در فهرست
تاریخچه
پرداخته و
آنها را در
بافر ورودی
کپی
میکنند.
دستور
ویرایشگر
toggle-literal-history بین
حالتهای
گسترشیافته
و لفظی خطوط
تاریخچه در
بافر ورودی
جابهجا
میشود.
expand-history و
expand-line به
ترتیب
جایگزینیهای
تاریخچه را
در کلمه
جاری و در کل
بافر ورودی
گسترش
میدهند.
جایگزینی نام مستعار (Alias substitution)
پوسته
فهرستی از
نامهای
مستعار را
نگهداری
میکند که
میتوان
آنها را
توسط
دستورهای
alias و unalias
تنظیم، لغو
و چاپ کرد. پس
از تجزیه خط
فرمان به
دستورهای
ساده
(ببینید
Commands)
نخستین
کلمه هر
دستور، از
چپ به راست،
بررسی
میشود تا
مشخص گردد
که آیا نام
مستعاری
دارد یا خیر.
در این
صورت، کلمه
اول با نام
مستعار
جایگزین
میشود. اگر
نام مستعار
حاوی یک
ارجاع به
تاریخچه
باشد، تحت
جایگزینی
تاریخچه (History
substitution) قرار
میگیرد،
درست گویی
دستور اصلی
خط ورودی
پیشین بوده
است. اگر نام
مستعار
حاوی ارجاع
به تاریخچه
نباشد،
فهرست
آرگومانها
دستنخورده
باقی
میماند.
بنابراین
اگر نام
مستعار
برای ‘ls’
عبارت بود
از
ls -lls /usrls -l /usrاگر نام
مستعار
برای
‘lookup’
عبارت بود
از
grep !^ /etc/passwdlookup billgrep bill /etc/passwdنامهای مستعار را میتوان برای معرفی فراساختار (metasyntax) تجزیهکننده به کار برد. برای نمونه،
alias print 'pr \!* |
lpr'print’)
تعریف
میکند که
آرگومانهایش
را با pr(1)
به چاپگر
خطی ارسال
میکند.
جایگزینی نام مستعار تا زمانی که کلمه اول دستور دیگر نام مستعاری نداشته باشد تکرار میشود. اگر یک جایگزینی نام مستعار کلمه اول را تغییر ندهد (مانند نمونه پیشین)، برای جلوگیری از ایجاد حلقه نشانهگذاری میشود. حلقههای دیگر شناسایی شده و باعث ایجاد خطا میشوند.
برخی نامهای مستعار توسط شل ارجاع داده میشوند؛ به بخش نامهای مستعار ویژه (+) مراجعه کنید.
جایگزینی متغیرها
شل فهرستی
از متغیرها
را نگهداری
میکند که
مقدار هر یک
از آنها
فهرستی از
صفر یا چند
کلمه است.
مقادیر
متغیرهای
شل را
میتوان با
دستورهای
set و unset
نمایش داد و
تغییر داد.
سیستم نیز
فهرست
اختصاصی
خود را از
متغیرهای
“محیطی”
نگهداری
میکند. این
متغیرها را
میتوان با
printenv ، setenv
و unsetenv
نمایش داد و
تغییر داد.
(+) متغیرها را میتوان با دستور زیر فقطخواندنی کرد:
set -rset -rبرخی
متغیرها
توسط شل
مقداردهی
میشوند یا
توسط آن
مورد ارجاع
قرار
میگیرند.
بهعنوان
مثال،
متغیر argv
تصویری از
فهرست
آرگومانهای
شل است و
کلماتِ
مقدار این
متغیر به
شیوههایی
ویژه ارجاع
داده
میشوند.
برخی از
متغیرهایی
که توسط شل
ارجاع داده
میشوند
کلیدهای
دوحالته (toggles)
هستند؛
برای شل مهم
نیست که
مقدار
آنها
چیست، بلکه
فقط تنظیم
بودن یا
نبودن
آنها
اهمیت دارد.
بهعنوان
مثال،
متغیر verbose
یک کلید
دوحالته
است که باعث
پژواک (echo) شدن
ورودی
دستورها
میشود.
گزینه خط
فرمان -v
این متغیر
را تنظیم
میکند. بخش
متغیرهای
ویژه شل
فهرست تمام
متغیرهایی
را که توسط
شل ارجاع
داده
میشوند
ارائه
میدهد.
عملیات
دیگر با
متغیرها به
صورت عددی
رفتار
میکنند.
دستور
‘@’
اجازه
میدهد
محاسبات
عددی انجام
شده و نتیجه
به یک متغیر
اختصاص
یابد. با این
حال،
مقادیر
متغیرها
همواره به
صورت (صفر یا
چند) رشته
نمایش داده
میشوند.
برای اهداف
عملیات
عددی، رشته
خالی برابر
با صفر در
نظر گرفته
میشود، و
کلمات دوم و
پس از آن در
مقادیر
چندکلمهای
نادیده
گرفته
میشوند.
پس از
اعمال نام
مستعار (alias) و
تجزیهٔ خط
ورودی، و
پیش از
اجرای هر
دستور،
جایگزینی
متغیرها با
استفاده از
نویسهٔ
‘$’
انجام
میشود.
میتوان با
قرار دادن
یک ‘\’
پیش از
‘$’ از
این بسط
جلوگیری
کرد، مگر
درون
جفتهای
‘"’ که
همیشه
انجام
میشود، و
درون
جفتهای
‘'’ که
هرگز رخ
نمیدهد.
رشتههای
درون ‘`’
بعداً
تفسیر
میشوند
(نگاه کنید
به
جایگزینی
دستور)
بنابراین
جایگزینی
‘$’ در
آنجا تا
زمانِ بعد
(در صورت
وقوع) رخ
نمیدهد. یک
‘$’ اگر
با یک
فاصله، تب
یا انتهای
خط همراه
باشد، بدون
تغییر
منتقل
میشود.
تغییرمسیرهای ورودی/خروجی پیش از بسط متغیر تشخیص داده میشوند، و بسط متغیرِ آنها بهطور جداگانه انجام میگیرد. در غیر این صورت، نام دستور و تمام فهرست آرگومان با هم بسط داده میشوند. بنابراین ممکن است نخستین کلمه (دستور) (تا این لحظه) بیش از یک کلمه تولید کند، که نخستینِ آنها نام دستور شده و بقیه به آرگومانها تبدیل میشوند.
مگر در
صورت قرار
گرفتن درون
‘"’ یا
اعمال
اصلاحکنندهٔ
‘:q’
نتایج
جایگزینی
متغیر ممکن
است در
نهایت تحت
جایگزینی
دستور و نام
فایل قرار
گیرند. درون
‘" ،’
متغیری که
مقدار آن از
چند کلمه
تشکیل شده
است به (بخشی
از) یک کلمهٔ
واحد بسط
مییابد،
در حالی که
کلماتِ
مقدار
متغیر با
فاصله از هم
جدا
شدهاند.
هنگامی که
اصلاحکنندهٔ
‘:q’ بر یک
جایگزینی
اعمال شود،
متغیر به
چند کلمه
بسط
مییابد که
هر کلمه با
یک فاصله
جدا شده و
نقلقول
میشود تا
از
جایگزینی
بعدی دستور
یا نام فایل
جلوگیری به
عمل آید.
دستور
ویرایشگر
expand-variables ، که
بهطور
معمول به
^X-$ متصل (bind)
است،
میتواند
برای بسط
تعاملی
متغیرهای
منفرد
استفاده
شود.
فراتوالیهای جایگزینی متغیر
فراتوالیهای زیر برای وارد کردن مقادیر متغیرها به ورودی پوسته ارائه شدهاند:
$name${name}- کلمات مقدار متغیر name را، که هر کدام با یک نویسهٔ فاصله جدا شدهاند، جایگزین میکند. کروشهها name را از نویسههای پس از آن که در غیر این صورت بخشی از نام محسوب میشدند، جدا میکنند. متغیرهای پوسته نامهایی متشکل از حروف و ارقام دارند که با یک حرف آغاز میشوند. نویسهٔ زیرخط (underscore) به عنوان یک حرف در نظر گرفته میشود. اگر name یک متغیر پوسته نباشد، اما در محیط (environment) تنظیم شده باشد، مقدار آن بازگردانده میشود (هرچند برخی از اشکال دیگر که در ادامه آمدهاند در این حالت در دسترس نیستند).
$name[selector]${name[selector]}- تنها کلمات
انتخابشده
از مقدار
name را
جایگزین
میکند. بخش
selector تحت
جایگزینی
‘
$’ قرار میگیرد و میتواند شامل یک عدد منفرد یا دو عدد جداشده با یک ‘-’ باشد. کلمهٔ نخست از مقدار یک متغیر با شمارهٔ ‘1’ مشخص میشود. اگر عدد نخست یک بازه حذف شود، مقدار پیشفرض آن ‘1’ است. اگر عضو پایانی یک بازه حذف شود، مقدار پیشفرض آن ‘$#name’ خواهد بود. انتخابگر selector با مقدار ‘*’ همهٔ کلمات را انتخاب میکند. خالی بودن یک بازه در صورتی که آرگومان دوم حذف شده باشد یا در محدوده باشد، خطا محسوب نمیشود. $0- نام فایلی که ورودی دستور از آن در حال خوانده شدن است را جایگزین میکند. اگر نام مشخص نباشد، خطایی رخ میدهد.
$number${number}- معادل است
با
‘
$argv[number’.] $*- معادل است
با ‘
$argv ،’ که خود معادل ‘$argv[*]’ است.
به جز موارد ذکر شده، ارجاع به متغیری که تنظیم نشده است یک خطا محسوب میشود.
اصلاحکنندههای
‘:’
توصیفشده
در بخش
اصلاحکنندههای
کلمات
تاریخچه (History word
modifiers) ، به
استثنای
‘:p ،’
میتوانند
بر روی
جایگزینیهای
بالا اعمال
شوند.
میتوان از
بیش از یک
اصلاحکننده
استفاده
کرد. (+) ممکن
است برای
جداسازی یک
جایگزینی
متغیر از یک
‘:’
لفظی،
همانند
اصلاحکنندههای
کلمات
تاریخچه (History word
modifiers) به
استفاده از
آکولاد
نیاز باشد؛
هرگونه
اصلاحکننده
باید در
درون
آکولادها
قرار گیرد.
جایگزینی متغیرها بدون اصلاحکنندهها
جایگزینیهای
زیر را
نمیتوان
با
اصلاحکنندههای
‘:’
تغییر داد:
$?name${?name}- رشتهٔ
‘
1’ را در صورتی که name تنظیم شده باشد، و ‘0’ را در غیر این صورت جایگزین میکند. $?0- اگر نام
فایل ورودی
فعلی مشخص
باشد، با
‘
1’ و در غیر این صورت با ‘0’ جایگزین میشود. در شلهای تعاملی همواره ‘0’ است. $#name${#name}- با تعداد کلمات موجود در name جایگزین میشود.
$#- معادل
‘
$#argv’ است. (+) $%name${%name}- با تعداد نویسههای موجود در name جایگزین میشود. (+)
$%number${%number}- با تعداد
نویسههای
موجود در
‘
$argv[number’ جایگزین میشود. (+)] $?- معادل
‘
$status’ است. (+) $$- با شناسه فرایند (PID در مبنای دهدهی) شل (والد) جایگزین میشود.
$!- با شناسه فرایند (PID در مبنای دهدهی) آخرین فرایند پسزمینهای که توسط این شل آغاز شده است جایگزین میشود. (+)
$_- خط فرمان آخرین دستور اجرا شده را جایگزین میکند. (+)
$<- یک خط از
ورودی
استاندارد
را بدون
هیچگونه
تفسیر بعدی
جایگزین
میکند.
میتوان از
آن برای
خواندن از
صفحهکلید
در یک
شلاسکریپت
استفاده
کرد. (+) در
حالی که
csh(1)
همیشه
‘
$<’ را نقلقول (کوتیشن) میکند، گویی معادل ‘$<:q’ است،tcshاین کار را نمیکند. علاوه بر این، هنگامی کهtcshمنتظر تایپ شدن یک خط است، کاربر میتواند با تایپ یک وقفه (interrupt)، دنبالهای را که قرار است خط در آن جایگزین شود متوقف کند، اما csh(1) چنین اجازهای نمیدهد. $?<- تعداد بایتهای موجود از ورودی استاندارد را جایگزین میکند. (این ویژگی ممکن است غیرقابلحمل باشد.) (+)
جایگزینی دستور، نام فایل و پشتهٔ دایرکتوری
جایگزینیهای باقیمانده بهصورت گزینشی بر روی آرگومانهای دستورات توکار اعمال میشوند. این بدان معناست که بخشهایی از عبارتها که ارزیابی نمیشوند، تحت این بسطها قرار نمیگیرند. برای دستوراتی که درونی شل نیستند، نام دستور بهطور جداگانه از فهرست آرگومانها جایگزین میشود. این عمل بسیار دیر، پس از انجام تغییر مسیر ورودی-خروجی، و در یک فرزند شل اصلی رخ میدهد.
جایگزینی دستور
جایگزینی
دستور با
دستوری که
در ‘`’
محصور شده
باشد مشخص
میشود.
خروجی چنین
دستوری در
محل
فاصلهها،
تبها و
خطوط جدید
به کلمات
مجزا تفکیک
شده، و
کلمات تهی
نادیده
گرفته
میشوند.
خروجی
مشمول
جایگزینی
متغیر و
دستور قرار
گرفته و
بهجای
رشته اصلی
قرار
میگیرد.
جایگزینیهای
دستور درون
نقلقولهای
دوتایی
(‘"’)
فاصلهها و
تبها را
حفظ
میکنند؛
تنها خطوط
جدید موجب
کلمات جدید
میشوند. خط
جدید
پایانی
منفرد در
هیچ حالتی
موجب کلمه
جدید
نمیشود.
بنابراین
ممکن است که
یک
جایگزینی
دستور تنها
بخشی از یک
کلمه را
حاصل کند،
حتی اگر
دستور یک خط
کامل را
خروجی دهد.
بهطور
پیشفرض،
شل از نگارش
6.12 تمام
نویسههای
خط جدید و
بازگشت به
ابتدای سطر
(carriage return) در دستور
را با فاصله
جایگزین
میکند. اگر
این ویژگی
با لغو
تنظیم csubstnonl
غیرفعال
شود، خطوط
جدید طبق
معمول
دستورات را
جدا
میکنند.
جایگزینی نام فایل
اگر
کلمهای
شامل هر یک
از
نویسههای
‘* ،’
‘? ،’
‘[ ،’ یا
‘{’ باشد
یا با
نویسهٔ
‘~’ آغاز
شود،
کاندیدایی
برای
جایگزینی
نام فایل
است، که به
آن “globbing” نیز
میگویند.
سپس این
کلمه به
عنوان یک
الگو (“glob-pattern”)
در نظر
گرفته
میشود، و
با فهرستی
از نامهای
فایل که با
الگو
مطابقت
دارند و بر
اساس الفبا
مرتب
شدهاند،
جایگزین
میشود.
در تطبیق
نام
فایلها،
نویسه
‘.’ در
ابتدای نام
فایل یا
بلافاصله
پس از یک
‘/ ،’ و
همچنین خود
نویسه
‘/’ باید
بهطور
صریح تطبیق
داده شوند
(مگر اینکه
globdot یا
globstar یا هر
دو تنظیم
شده باشند (+)).
نویسه
‘*’ با هر
رشتهای از
نویسهها،
از جمله
رشته خالی،
تطبیق
مییابد.
نویسه
‘?’ با هر
تکنویسهای
تطبیق
مییابد.
توالی
‘[...]’ با
هر یک از
نویسههای
محصورشده
تطبیق
مییابد.
درون ‘[...]
،’ یک جفت
نویسه که با
‘-’ از هم
جدا
شدهاند،
با هر
نویسهای
که از نظر
لغوی بین آن
دو قرار
دارد تطبیق
پیدا
میکند.
(+) برخی از
الگوهای
تطبیق نام
(glob-patterns) را
میتوان
نفی کرد:
توالی
‘[^...]’ با
هر
تکنویسهای
که توسط
نویسهها
و/یا
محدودههای
نویسهای
داخل
کروشهها
مشخص
نشده
باشد
تطبیق
مییابد.
همچنین
میتوان یک
الگوی
تطبیق نام
را بهطور
کامل با
‘^’ نفی
کرد:
> echo * bang crash crunch ouch > echo ^cr* bang ouch
الگوهای
تطبیق نامی
که از ‘?
،’ ‘*’
یا ‘[]’
استفاده
نمیکنند،
یا آنهایی
که از ‘{}’
یا ‘~’ (در
ادامه)
استفاده
میکنند،
بهدرستی
نفی
نمیشوند.
نشانهگذاری
‘a{b,c,d}e’ یک
عبارت
خلاصه برای
‘abe ace ade’
است. ترتیب
چپبهراست
حفظ
میشود:
/usr/source/s1/{oldls,ls}.c/usr/source/s1/oldls.c
/usr/source/s1/ls.c../{memo,*box}../memo ../box ../mboxmemo’
همراه با
نتایج
تطابقِ
‘*box’ مرتب
نشده است.)
این که این
ساختار به
فایلهایی
بسط یابد که
وجود
ندارند خطا
محسوب
نمیشود،
اما ممکن
است از
فرمانی که
لیست
بسطیافته
به آن داده
شده است،
خطا دریافت
کنید. این
ساختار
میتواند
بهصورت
تودرتو
باشد.
بهعنوان
یک حالت
خاص، کلمات
‘{’,
‘}’ و
‘{}’ بدون
تغییر رد
میشوند.
نویسهٔ
‘~’ در
ابتدای نام
یک فایل، به
دایرکتوریهای
خانگی
اشاره دارد.
بهصورت
تنها، یعنی
‘~ ،’ به
دایرکتوری
خانگی
فراخواننده
بههمان
صورتی که در
متغیر شل
home منعکس
شده، بسط
مییابد.
هنگامی که
پس از آن
نامی متشکل
از حروف،
ارقام و
نویسههای
‘-’
بیاید، شل
بهدنبال
کاربری با
آن نام
میگردد و
دایرکتوری
خانگی او را
جایگزین
میکند؛
بنابراین
~ken/usr/ken~ken/chmach/usr/ken/chmach~’
نویسهای
غیر از یک
حرف یا
‘/’ قرار
گیرد، یا در
جایی غیر از
ابتدای یک
کلمه ظاهر
شود،
دستنخورده
باقی
میماند.
بنابراین
فرمانی
مانند
setenv MANPATH
/usr/share/man:/usr/local/share/man:~/lib/manاگر یک
الگوی
تطابق فایل
(glob-pattern) حاوی ‘*
،’ ‘? ،’
‘[’ یا
‘~ ،’ با
یا بدون ‘^
،’ با هیچ
فایلی
مطابقت
پیدا نکند،
یک خطا
محسوب
میشود. با
این حال،
تنها کافی
است یکی از
الگوها در
فهرستی از
الگوهای
تطابق فایل
با یک فایل
مطابقت
داشته باشد
(به طوری که
به عنوان
مثال،
rm *.a *.c *.o.a ،’
‘.c’ یا
‘.o’ وجود
نداشته
باشد)، و اگر
متغیر شل
nonomatch تنظیم
شده باشد،
الگویی (یا
فهرستی از
الگوها) که
با هیچ چیز
مطابقت
ندارد به
جای ایجاد
خطا، بدون
تغییر باقی
میماند.
متغیر شل
globstar
میتواند
طوری تنظیم
شود که
‘**’ یا
‘***’ به
عنوان یک
الگوی
تطابق فایل
مجاز
شناخته
شوند که با
هر رشتهای
از
نویسهها
شامل ‘/’
مطابقت
یافته و به
طور
بازگشتی در
تمام
زیردایرکتوریهای
موجود
پیمایش کند.
برای
نمونه،
ls **.cls
/usr/include/**/time.htime.h’
را در درخت
دایرکتوری
/usr/include فهرست
میکند؛
ls /usr/include/**time.htime.h’ ختم
شود مطابقت
مییابد؛ و
ls
/usr/include/**time**.htime’ در
نام
زیردایرکتوری
یا در خود
نام فایل آن
وجود داشته
باشد،
مطابقت
خواهد داشت.
برای
جلوگیری از
مشکلات
ناشی از
بازگشت (recursion)،
الگوی
تطابق
‘**’ وارد
پیوندهای
نمادینی که
به یک
دایرکتوری
اشاره
دارند
نخواهد شد.
برای لغو
این رفتار،
از ‘***’ (+)
استفاده
کنید.
متغیر
پوستهٔ
noglob
میتواند
برای
جلوگیری از
جایگزینی
نام فایل
تنظیم شود،
و دستور
ویرایشگر
expand-glob که
معمولاً به
^X-* مقید
شده است،
میتواند
برای گسترش
تعاملی
جایگزینیهای
نام فایل به
صورت تکی
استفاده
شود.
جایگزینی پشتهٔ دایرکتوری (+)
پشتهٔ
دایرکتوری
فهرستی از
دایرکتوریها
است که از
صفر
شمارهگذاری
شده و توسط
دستورهای
توکار pushd
، popd و
dirs
استفاده
میشود.
dirs
میتواند
در هر زمان
پشتهٔ
دایرکتوری
را چاپ
کرده، در یک
فایل
ذخیره،
بازیابی و
پاک کند؛
همچنین
متغیرهای
پوستهٔ
savedirs و dirsfile
میتوانند
طوری تنظیم
شوند که
پشتهٔ
دایرکتوری
را بهطور
خودکار
هنگام خروج
از سیستم
ذخیره کرده
و هنگام
ورود
بازیابی
نمایند.
متغیر
پوستهٔ
dirstack را
میتوان
برای
مشاهدهٔ
پشتهٔ
دایرکتوری
بررسی نمود
و همچنین
برای قرار
دادن
دایرکتوریهای
دلخواه در
پشتهٔ
دایرکتوری
تنظیم کرد.
نویسهٔ
‘=’ به
همراه یک یا
چند رقم به
یک مدخل در
پشتهٔ
دایرکتوری
گسترش
مییابد.
حالت خاص
‘=-’ به
آخرین
دایرکتوری
در پشته
گسترش
مییابد.
برای
نمونه،
> dirs -v 0 /usr/bin 1 /usr/spool/uucp 2 /usr/accts/sys > echo =1 /usr/spool/uucp > echo =0/calendar /usr/bin/calendar > echo =- /usr/accts/sys
متغیرهای
شل noglob و
nonomatch و
دستور
ویرایشگر
expand-glob علاوه
بر
جایگزینی
نام
فایلها،
برای پشته
دایرکتوری
نیز اعمال
میشوند.
سایر جایگزینیها (+)
تبدیلهای
متعدد
دیگری نیز
در رابطه با
نام
فایلها
وجود دارد
که ارتباط
مستقیمی با
موارد فوق
ندارند،
اما برای
کامل بودن
در اینجا
ذکر
شدهاند.
هر نام
فایلی ممکن
است در
زمانی که
متغیر symlinks
روی ‘expand’
تنظیم شده
باشد، به یک
مسیر کامل
بسط یابد.
نقلقول
کردن مانع
از این بسط
میشود، و
دستور
ویرایشگر
normalize-path آن را
به صورت
درخواستی
انجام
میدهد.
دستور
ویرایشگر
normalize-command
دستورات
موجود در
PATH را در
صورت
درخواست به
مسیرهای
کامل بسط
میدهد. در
نهایت، cd
و pushd
نویسه
‘-’ را به
عنوان
دایرکتوری
کاری قبلی
(معادل
متغیر شل
owd) تفسیر
میکنند.
این اصلاً
یک
جایگزینی
نیست، بلکه
یک
کوتهنوشت
است که تنها
توسط این
دستورها
شناخته
میشود. با
این وجود،
با نقلقول
کردن
میتوان از
این رفتار
نیز
جلوگیری
کرد.
دستورها
سه بخش بعدی نحوه اجرای دستورات توسط شل و تعامل آن با ورودی و خروجی آنها را شرح میدهد.
دستورهای ساده، خطلولهها و دنبالهها
یک دستور
ساده
دنبالهای
از کلمات
است که
اولین
کلمه،
دستوری را
که باید
اجرا شود
مشخص
میکند.
مجموعهای
از
دستورهای
ساده که با
نویسههای
‘|’ به
یکدیگر
متصل
شدهاند،
یک خطلوله
(pipeline) را تشکیل
میدهند.
خروجی هر
دستور در یک
خطلوله به
ورودی
دستور بعدی
متصل
میشود.
دستورهای
ساده و
پایپلاینها
میتوانند
با ‘;’ به
صورت
توالیهایی
به یکدیگر
متصل شوند و
به صورت
متوالی
اجرا
خواهند شد.
همچنین
میتوان
دستورها و
پایپلاینها
را با ‘||’
یا ‘&&’
به صورت
توالیهایی
به یکدیگر
متصل کرد؛
این کار
مشابه زبان C
نشان
میدهد که
دستور دوم
به ترتیب
تنها در
صورتی اجرا
میشود که
دستور اول
با شکست
مواجه شود
یا با
موفقیت
انجام
پذیرد.
یک دستور
ساده،
پایپلاین
یا توالی
میتواند
درون
پرانتزها
(‘(’ و
‘)’) قرار
گیرد تا یک
دستور ساده
را تشکیل
دهد، که به
نوبه خود
میتواند
جزئی از یک
پایپلاین
یا یک توالی
باشد. یک
دستور،
پایپلاین
یا توالی را
میتوان
بدون معطل
ماندن برای
خاتمه آن،
با قرار
دادن یک
‘&’ در
انتهای آن
اجرا کرد.
اجرای دستورهای توکار (Builtin) و غیرتوکار
دستورهای توکار (Builtin) درون پوسته اجرا میشوند. اگر هر یک از اجزای یک پایپلاین بهجز آخرین جزء آن یک دستور توکار باشد، آن پایپلاین در یک زیرپوسته (subshell) اجرا میشود.
دستورهای داخل پرانتز همیشه در یک زیرپوسته اجرا میشوند.
(cd; pwd); pwd
بنابراین
دایرکتوری
home را چاپ
میکند، در
حالی که شما
را در همان
جایی که
بودید باقی
میگذارد
(که آن را پس
از
دایرکتوری
خانگی چاپ
میکند)، در
حالی که
cd; pwd
شما را در
دایرکتوری
home باقی
میگذارد.
دستورهای
پرانتزی
بیشتر
اوقات برای
جلوگیری از
تأثیرگذاری
cd بر روی
پوسته فعلی
استفاده
میشوند.
هنگامی که
مشخص شود
دستور مورد
نظر برای
اجرا یک
دستور
توکار
نیست،
پوسته تلاش
میکند
دستور را از
طریق
execve(2)
اجرا کند. هر
کلمه در
متغیر path
نام یک
دایرکتوری
است که
پوسته در آن
به دنبال
دستور
میگردد.
اگر به
پوسته
گزینهٔ -f
داده نشده
باشد،
پوسته
نامهای
موجود در
این
دایرکتوریها
را در یک
جدول داخلی
هش میکند
تا فقط
فراخوانی
execve(2) را
در
دایرکتوریای
امتحان کند
که احتمال
وجود دستور
در آنجا
وجود دارد.
این کار در
زمان وجود
تعداد
زیادی
دایرکتوری
در مسیر
جستجو،
سرعت پیدا
کردن دستور
را به شدت
افزایش
میدهد. این
سازوکار
هشینگ در
موارد زیر
استفاده
نمیشود:
- اگر هشینگ
صراحتاً با
استفاده از
unhashغیرفعال شده باشد. - اگر به
پوسته یک
-fargument داده شده باشد. - برای هر بخش
دایرکتوری
از
pathکه با یک ‘/’ شروع نمیشود. - اگر دستور
حاوی یک
‘
/’ باشد.
در چهار مورد فوق، پوسته هر مؤلفه از بردار مسیر را با نام دستور دادهشده الحاق میکند تا نام مسیر فایلی را تشکیل دهد و سپس برای اجرای آن تلاش میکند. اگر اجرا موفقیتآمیز باشد، جستجو متوقف میشود.
اگر فایل
دارای
دسترسیهای
اجرایی
باشد اما
برای سیستم
یک فایل
اجرایی
محسوب نشود
(یعنی نه یک
باینری
اجرایی
باشد و نه
اسکریپتی
که مفسر خود
را مشخص
کرده است)،
در این صورت
فرض میشود
فایلی حاوی
دستورات
پوسته است و
یک پوستهٔ
جدید برای
خواندن آن
ایجاد
میگردد.
نام مستعار
ویژهٔ shell
میتواند
برای تعیین
مفسری غیر
از خود
پوسته
تنظیم شود.
در
سیستمهایی
که قرارداد
مفسر
اسکریپت
‘#!’ را
متوجه
نمیشوند،
پوسته ممکن
است برای
شبیهسازی
آن کامپایل
شده باشد؛
متغیر
پوستهٔ
version را
ببینید. اگر
چنین باشد،
پوسته خط
اول فایل را
بررسی
میکند تا
ببیند آیا
به این صورت
است یا خیر:
#!interpreter
arg ...ورودی/خروجی (Input/output)
ورودی استاندارد و خروجی استاندارد یک دستور را میتوان با نحو زیر بازهدایت کرد:
<name- فایل name (که ابتدا متغیر، دستور و نام فایل آن بسط داده شده است) را به عنوان ورودی استاندارد باز میکند.
<<word- ورودی
پوسته را تا
خطی که
کاملاً
مشابه word
باشد
میخواند.
word تحت
جایگزینی
متغیر، نام
فایل یا
دستور قرار
نمیگیرد،
و هر خط
ورودی پیش
از اعمال
هرگونه
جایگزینی
روی آن، با
word
مقایسه
میشود. مگر
اینکه یک
نویسهٔ
نقلقول
‘
\ ،’ ‘" ،’ ‘' ،’ یا ‘`’ در word ظاهر شود، جایگزینی متغیر و دستور روی خطوط میانی انجام میگیرد، که اجازه میدهد ‘\’ کاراکترهای ‘$ ،’ ‘\’ و ‘`’ را نقلقول کند. دستوراتی که جایگزین میشوند تمامی فاصلهها، تبها، و خطوط جدیدشان حفظ میشود، بهجز خط جدید پایانی که حذف میگردد. متن حاصل در یک فایل موقت ناشناس قرار میگیرد که به عنوان ورودی استاندارد به دستور داده میشود. >name>!name>&name>&!name- فایل name
بهعنوان
خروجی
استاندارد
استفاده
میشود. اگر
فایل وجود
نداشته
باشد،
ایجاد
میشود؛
اگر فایل از
قبل موجود
باشد،
محتویات
قبلی آن پاک
شده و
کوتاهسازی
(truncate) میگردد.
اگر متغیر پوسته
noclobberتنظیم شده باشد، فایل نباید وجود داشته باشد یا اینکه باید یک فایل کاراکتری خاص (مانند یک ترمینال یا /dev/null) باشد، در غیر این صورت خطا رخ میدهد. این ویژگی به جلوگیری از نابودی تصادفی فایلها کمک میکند. در این حالت، حالتهای شامل ‘!’ میتوانند برای نادیده گرفتن این بررسی استفاده شوند. اگر مقدار ‘notempty’ درnoclobberتعیین شده باشد، استفاده از ‘>’ روی فایلهای خالی مجاز است؛ اگر مقدار ‘ask’ درnoclobberتنظیم شده باشد، بهجای نمایش خطا، یک تایید تعاملی درخواست میشود.فرمهای شامل ‘
&’ علاوه بر خروجی استاندارد، خروجی عیبیابی (خطای استاندارد) را نیز به فایل مشخصشده هدایت میکنند. name به همان روش نامهای فایل ورودی در ‘<’ بسط داده میشود. >>name>>&name>>!name>>&!name- مشابه
‘
>’ است، اما خروجی را به انتهای name اضافه میکند (ضمیمه میکند). اگر متغیر پوستهnoclobberتنظیم شده باشد، در صورتی که فایل وجود نداشته باشد یک خطا محسوب میشود، مگر اینکه یکی از حالتهای شامل ‘!’ به کار رفته باشد.
هر دستور،
محیطی را که
شل در آن
فراخوانی
شده بود، پس
از اعمال
تغییرات
ناشی از
پارامترهای
ورودی-خروجی
و قرارگیری
دستور در یک
پایپلاین
(pipeline)، دریافت
میکند.
بنابراین،
برخلاف
برخی از
شلهای
قبلی،
دستوراتی
که از یک
فایل حاوی
دستورات شل
اجرا
میشوند
بهطور
پیشفرض به
متن
دستورات
دسترسی
ندارند؛
بلکه آنها
ورودی
استاندارد
اولیهٔ شل
را دریافت
میکنند.
برای
ارائهٔ
دادههای
درونخطی (inline)
باید از
سازوکار
‘<<’
استفاده
شود. این امر
به
اسکریپتهای
دستوریِ شل
اجازه
میدهد تا
بهعنوان
مؤلفههای
پایپلاینها
عمل کنند و
به شل امکان
میدهد
ورودی خود
را بهصورت
بلوکی
بخواند.
توجه داشته
باشید که
ورودی
استاندارد
پیشفرض
برای
دستوری که
بهصورت
مجزا (detached) اجرا
میشود،
فایل خالی
/dev/null
نیست ،
بلکه ورودی
استاندارد
اولیهٔ شل
است. اگر این
ورودی یک
ترمینال
باشد و
فرایند
تلاش کند از
ترمینال
بخواند،
فرایند
مسدود (block) شده
و به کاربر
اطلاع داده
خواهد شد
(بخش Jobs
را ببینید).
خروجی
خطایابی (diagnostic)
میتواند
همراه با
خروجی
استاندارد
از طریق یک
پایپ هدایت
شود. کافی
است بهجای
‘|’
تنها، از
شکل ‘|&’
استفاده
کنید.
شل در حال حاضر نمیتواند خروجی خطایابی را بدون تغییر مسیر خروجی استاندارد، بازهدایت کند، اما
( command
> output-file )
>&
error-fileویژگیها (Features)
پس از شرح چگونگی دریافت، تجزیه و اجرای خطوط فرمان توسط شل، اکنون به بررسی انواع گوناگونی از ویژگیهای سودمند آن میپردازیم.
جریان کنترل (Control flow)
شل شامل تعدادی دستور است که میتوان از آنها برای تنظیم جریان کنترل در فایلهای دستوری (اسکریپتهای شل) و (به روشهایی محدود اما مفید) از طریق ورودی ترمینال استفاده کرد. عملکرد تمامی این دستورات از طریق وادار کردن شل به بازخوانی یا پرش در ورودیاش صورت میپذیرد و به دلیل نحوهٔ پیادهسازی، محل قرارگیری برخی از دستورات را محدود میکند.
دستورهای
foreach ، switch
و while ، و
همچنین
ساختار if ...
then ... else از
دستور if ،
نیازمند آن
هستند که
کلمات
کلیدی اصلی
در یک خط
ورودی واحد
به صورت یک
دستور ساده
ظاهر شوند،
همانطور
که در ادامه
نشان داده
شده است.
اگر ورودی
پوسته قابل
جستجو (seekable)
نباشد،
پوسته
هنگام
خواندن یک
حلقه ورودی
را بافر
میکند و به
منظور
بازخوانی
لازم برای
حلقه،
عملیات
جستجو (seek) را
در این بافر
داخلی
انجام
میدهد. (تا
جایی که این
سازوکار
اجازه دهد،
دستورهای
gotoی رو به
عقب بر روی
ورودیهای
غیرقابلجستجو
با موفقیت
عمل خواهند
کرد.)
عبارتها (Expressions)
دستورهای
توکار if ،
while و exit
از
عبارتهایی
با نحو
یکسان
استفاده
میکنند.
این
عبارتها
میتوانند
شامل هر یک
از
عملگرهای
توصیفشده
در سه بخش
بعدی باشند.
توجه داشته
باشید که
دستور
توکار @
دارای نحو
جداگانه و
مختص به خود
است.
عملگرهای منطقی، حسابی و مقایسهای
این عملگرها مشابه عملگرهای زبان C هستند و تقدم یکسانی دارند.
عملگرها به ترتیب تقدم نزولی، با اولویت یکسان در هر خط، عبارتند از:
( |
) |
||
~ |
|||
! |
|||
* |
/ |
% |
|
+ |
- |
||
<< |
>> |
||
<= |
>= |
< |
> |
== |
!= |
=~ |
!~ |
& |
|||
^ |
|||
| |
|||
&& |
|||
|| |
عملگرهای
‘==’ ،
‘!=’ ،
‘=~’ و
‘!~’
آرگومانهای
خود را
بهصورت
رشته
مقایسه
میکنند؛
تمامی
عملگرهای
دیگر روی
اعداد عمل
میکنند.
عملگرهای
‘=~’ و
‘!~’
مانند
‘==’ و
‘!=’
هستند، با
این تفاوت
که سمت راست
یک الگوی glob
است (بخش
جایگزینی
نام فایل
را ببینید)
که عملوند
سمت چپ با آن
مطابقت
داده
میشود. این
امر نیاز به
استفاده از
دستور
توکار switch
را در
اسکریپتهای
شل، هنگامی
که تنها به
تطبیق الگو
نیاز است،
کاهش
میدهد.
آرگومانهای
تهی یا
ناموجود
برابر با
‘0’ در
نظر گرفته
میشوند.
نتیجه تمام
عبارات
بهصورت
رشتههایی
است که
نشاندهنده
اعداد
دهدهی
هستند. توجه
به این نکته
حائز اهمیت
است که هیچ
دو
مولفهای
از یک عبارت
نمیتوانند
در یک کلمه
یکسان ظاهر
شوند؛ به جز
در مواردی
که در
مجاورت
مولفههایی
از عبارات
باشند که از
نظر نحوی
برای
تجزیهکننده
اهمیت
دارند
(‘&’ ،
‘|’ ،
‘<’ ،
‘>’ ،
‘(’ ،
‘)’) باید
با
فاصلهها
احاطه
شوند.
وضعیت خروج دستور
دستورها
میتوانند
درون
عبارتها
اجرا شوند و
وضعیت خروج
آنها با
قرار
دادنشان
میان دو
آکولاد
(‘{’ و
‘}’)
بازگردانده
شود. به خاطر
داشته
باشید که
آکولادها
باید با
فاصله از
کلماتِ
دستور جدا
شوند. اجرای
دستور در
صورتی با
موفقیت
انجام
میشود و
مقدار
درست، یعنی
‘1’ را
برمیگرداند،
که خروج
دستور با
وضعیت 0
باشد، در
غیر این
صورت با
شکست مواجه
شده و مقدار
نادرست،
یعنی ‘0’
را
برمیگرداند.
اگر به
اطلاعات
دقیقتری
از وضعیت
خروج نیاز
باشد،
دستور باید
خارج از یک
عبارت اجرا
شده و متغیر
پوستهٔ
status بررسی
گردد.
عملگرهای پرسوجوی فایل
برخی از
این
عملگرها
آزمونهای
درست/نادرست
را روی
فایلها و
اشیاء
مرتبط
انجام
میدهند.
آنها به
شکل -op
file هستند، که
در آن
-op یکی
از موارد
زیر است:
-op- عملگر پرسوجوی درست/نادرست فایل
-r- دسترسی خواندن.
-w- دسترسی نوشتن.
-x- دسترسی اجرا.
-X- قابلاجرا
در path یا
دستور
توکار
پوسته،
برای نمونه
‘
-X ls’ و ‘-X ls-F’ معمولاً درست هستند، اما ‘-X /bin/ls’ اینطور نیست. (+) -e- موجود بودن.
-o- مالکیت.
-z- اندازه صفر.
-s- اندازه غیرصفر. (+)
-f- فایل عادی.
-d- دایرکتوری.
-l- پیوند نمادین (Symbolic link). (+) *
-b- فایل ویژه بلوکی (Block special file). (+)
-c- فایل ویژه نویسهای (Character special file). (+)
-p- پایپ نامگذاریشده (fifo). (+) *
-S- فایل ویژه سوکت (Socket special file). (+) *
-u- بیت Set-user-ID تنظیم شده است. (+)
-g- بیت Set-group-ID تنظیم شده است. (+)
-k- بیت چسبنده (Sticky bit) تنظیم شده است. (+)
-t- file (که باید یک رقم باشد) یک توصیفگر فایل باز برای یک دستگاه ترمینال است. (+)
-R- انتقال یافته است (فقط در Convex). (+)
-L- عملگرهای بعدی در یک آزمون چندعملگری را به جای فایلی که پیوند به آن اشاره میکند، بر روی خود پیوند نمادین اعمال میکند. (+) *
file از
نظر دستور و
نام فایل
بسط داده
میشود و
سپس بررسی
میگردد تا
مشخص شود
آیا رابطه
مشخصشده
با کاربر
واقعی را
دارد یا خیر.
اگر file
وجود
نداشته
باشد یا
غیرقابل
دسترسی
باشد، یا در
مورد
عملگرهایی
که با ‘*’
مشخص
شدهاند،
نوع فایل
مشخصشده
در سیستم
فعلی وجود
نداشته
باشد،
آنگاه همه
پرسوجوها
مقدار
نادرست
یعنی ‘0’
را
برمیگردانند.
این عملگرها را میتوان برای اختصار ترکیب کرد:
-xy
file-x
file &&
-y file-fx’ برای
فایلهای
اجرایی
معمولی
درست است
(مقدار
‘1’ را
برمیگرداند)،
اما برای
دایرکتوریها
چنین نیست.
-L
میتواند
در یک آزمون
چندعملگری
استفاده
شود تا
عملگرهای
بعدی
بهجای
فایلی که
پیوند به آن
اشاره
میکند، بر
روی یک
پیوند
نمادین (symbolic link)
اعمال شوند.
به عنوان
مثال، -lLo
برای
پیوندهایی
که مالک
آنها
کاربر
فراخواننده
است، درست (true)
است. -Lr
-، -Lw و
-Lx همواره
برای
پیوندها
درست و برای
غیرپیوندها
نادرست
هستند. -L
هنگامی که
آخرین
عملگر در یک
آزمون
چندعملگری
باشد معنای
متفاوتی
دارد؛
پایینتر
را ببینید.
ترکیب
کردن
عملگرهایی
که انتظار
دارند file
یک فایل
باشد با
عملگرهایی
که چنین
انتظاری
ندارند
(مانند -X
و -t)
امکانپذیر
است اما
کاربردی
ندارد و
گاهی
گمراهکننده
است. آوردن
یک عملگر
غیرفایلی
پس از -L
میتواند
نتایج
بهویژه
عجیبی به
دنبال
داشته
باشد.
عملگرهای
دیگر
اطلاعات
دیگری را
بازمیگردانند،
یعنی نه فقط
‘0’ یا
‘1’. (+)
آنها همان
قالب قبلی
را دارند؛
-op
میتواند
یکی از
موارد زیر
باشد:
-op- عملگر پرسوجوی فایل گسترشیافته
-A- زمان آخرین دسترسی به فایل، به صورت تعداد ثانیههای سپریشده از مبدأ تاریخ (epoch).
-A:- مانند ‘
A ،’ اما در قالب برچسب زمانی (timestamp)، برای نمونه، ‘Fri May 14 16:36:10 1993’. -M- زمان آخرین تغییر فایل.
-M:- مانند
-M-،اما در قالب برچسب زمان (timestamp). -C- زمان آخرین تغییر inode.
-C:- مانند
-C-،اما در قالب برچسب زمان (timestamp). -D- شماره دستگاه (Device number).
-I- شماره inode.
-F- شناسه
ترکیبی
-file، به فرم device:inode. -L- نام فایلی که یک پیوند نمادین (symbolic link) به آن اشاره دارد.
-N- تعداد پیوندهای سخت (hard links).
-P- مجوزها، در مبنای هشت (اکتال)، بدون صفر آغازین.
-P:- مانند
-P-،با صفر آغازین. -Pmode- معادل است
با
به عنوان مثال، ‘
-Pfile&mode-P22 file’ مقدار ‘22’ را بازمیگرداند اگر file توسط گروه و دیگران قابل نوشتن باشد، ‘20’ را بازمیگرداند اگر تنها توسط گروه باشد، و ‘0’ را بازمیگرداند اگر توسط هیچکدام نباشد. -Pmode:- مانند
-Pmode ، همراه با صفر در ابتدا. -U- شناسه عددی کاربر (userid).
-U:- نام کاربری، یا در صورت ناشناخته بودن نام کاربری، شناسه عددی کاربر.
-G- شناسه عددی گروه (groupid).
-G:- نام گروه، یا در صورت ناشناخته بودن نام گروه، شناسه عددی گروه.
-Z- اندازه، به بایت.
تنها یکی
از این
عملگرها
میتواند
در یک آزمون
چندعملگری
ظاهر شود، و
حتماً باید
آخرین
عملگر باشد.
توجه داشته
باشید که
‘L’ در
پایان یک
آزمون
چندعملگری
نسبت به
جاهای دیگر
آن معنای
متفاوتی
دارد. از
آنجا که ‘0’
یک مقدار
بازگشتی
معتبر برای
بسیاری از
این
عملگرها
است، آنها
در زمان
شکست ‘0’ را
برنمیگردانند:
اکثر آنها
‘-1’ را
برمیگردانند،
و ‘F’
مقدار
‘:’ را
برمیگرداند.
اگر شل با
تعریف POSIX
کامپایل
شده باشد
(متغیر شل
version را
ببینید)،
نتیجه
پرسوجوی
فایل بر
پایه
بیتهای
مجوز فایل
است و نه بر
پایه نتیجه
فراخوانی
سیستمی
access(2).
برای
نمونه، اگر
فایلی با
-w آزموده
شود که
مجوزهای آن
بهطور
معمول
اجازه
نوشتن
میدهند
اما روی یک
سیستم فایل
که بهصورت
فقطخواندنی
مونت شده
قرار دارد،
این آزمون
در یک شل POSIX
موفق خواهد
بود اما در
یک شل غیر-POSIX
شکست
میخورد.
عملگرهای
پرسوجوی
فایل
همچنین
میتوانند
با دستور
توکار filetest
ارزیابی
شوند (+).
کارها (Jobs)
پوسته به
هر خط لوله
(pipeline) یک job
(کار) اختصاص
میدهد. این
پوسته
جدولی از
کارهای
جاری نگه
میدارد که
توسط دستور
jobs چاپ
میشود، و
به آنها
اعداد صحیح
کوچکی
اختصاص
میدهد.
هنگامی که
یک کار
بهصورت
غیرهمگام
(asynchronously) با
‘&’
آغاز
میشود،
پوسته خطی
را چاپ
میکند که
بدین شکل
است:
[1] 1234
که نشان میدهد کاری که بهصورت غیرهمگام آغاز شده، کار شماره ۱ بوده و دارای یک پروسه (سطح بالا) بوده که شناسه پروسه (PID) آن ۱۲۳۴ است.
اگر در حال
اجرای یک
کار هستید و
میخواهید
کار دیگری
انجام
دهید،
میتوانید
کلید تعلیق
(معمولاً
^Z) را
فشار دهید
که یک
سیگنال STOP به
کار جاری
ارسال
میکند. سپس
پوسته
معمولاً
اعلام
میکند که
کار
Suspendedlistjobs
تنظیم شده
باشد، همه
کارها
مشابه
دستور
توکار jobs
فهرست
میشوند؛
اگر روی
‘long’
تنظیم شده
باشد،
فهرستبندی
در قالب
طولانی
خواهد بود،
مانند ‘jobs
-l’. سپس
میتوانید
وضعیت کار
معلق را
مدیریت
کنید.
میتوانید
آن را با
دستور bg
به
“پسزمینه”
بفرستید یا
دستورهای
دیگری را
اجرا کنید و
در نهایت با
fg کار را
دوباره به
“پیشزمینه”
بیاورید.
(دستور
ویرایشگر
run-fg-editor را
نیز ببینید.)
یک ^Z
فوراً اثر
میگذارد و
شبیه به یک
وقفه است از
این نظر که
خروجیهای
در انتظار و
ورودیهای
خواندهنشده
هنگام
فشرده شدن
آن دور
ریخته
میشوند.
دستور
توکار wait
باعث
میشود
پوسته تا
زمان اتمام
تمام
کارهای
پسزمینه
منتظر
بماند.
کلید ^]
یک سیگنال
تعلیق با
تاخیر به
کار فعلی
میفرستد،
که تا زمانی
که برنامه
سعی در
read(2)
کردن آن
نداشته
باشد،
سیگنال STOP
ایجاد
نمیکند.
این ویژگی
در زمانی که
دستوراتی
را برای یک
کار از پیش
آماده
کردهاید و
میخواهید
پس از
خواندن
آنها
متوقف شود،
میتواند
مفید واقع
شود. کلید
^Y این
عملکرد را
در csh(1)
انجام
میدهد؛ در
، کلید
^Y یک
دستور
ویرایشی
است. (+)
کاری که در پسزمینه اجرا میشود در صورت تلاش برای خواندن از ترمینال، متوقف میگردد. کارهای پسزمینه به طور معمول مجاز به تولید خروجی هستند، اما این امکان میتواند با اجرای دستور زیر غیرفعال شود:
stty tostopروشهای
متعددی
برای ارجاع
به کارها در
پوسته وجود
دارد. نویسه
‘%’ نام
یک کار را
معرفی
میکند. اگر
میخواهید
به کار
شماره ۱
اشاره
کنید،
میتوانید
آن را به این
صورت نام
ببرید:
%1%1fg %1%1 &bg %1%exex’
شروع شود.
همچنین
امکان تایپ
کردن
%?stringپوسته
مفهومی از
جابهای
فعلی و قبلی
را نگهداری
میکند. در
خروجیهای
مربوط به
جابها،
جاب فعلی با
یک ‘+’ و
جاب قبلی با
یک ‘-’
مشخص
میشوند.
مخففهای
‘%+ ،’
‘%’ و (با
قیاس از
ساختار نحو
مکانیزم
history) ‘%%’
همگی به جاب
فعلی، و
‘%-’ به
جاب قبلی
اشاره
دارند.
مکانیزم
کنترل جاب
نیازمند
این است که
در برخی
سیستمها،
گزینه
‘new’ در
stty(1)
تنظیم شده
باشد. این
ویژگی اثری
بهجامانده
از
پیادهسازی
“new” در
درایور tty
است که
اجازه
میدهد
نویسههای
وقفه (interrupt) از
صفحهکلید
تولید شوند
تا به
جابها
دستور توقف
دهند. برای
جزئیات
بیشتر در
مورد تنظیم
گزینهها
در درایور
جدید tty،
stty(1) و
دستور
توکار setty
را ببینید.
گزارش وضعیت (Status reporting)
پوسته
بلافاصله
پس از تغییر
وضعیت هر
پردازه، از
آن مطلع
میشود. این
پوسته به
طور معمول
هرگاه جابی
مسدود شود و
امکان
پیشرفت
دیگری وجود
نداشته
باشد شما را
آگاه
میسازد،
اما این کار
تنها درست
پیش از
نمایش خط
فرمان (prompt)
انجام
میشود. این
شیوه به این
دلیل است که
مزاحم کار
شما نشود. با
این حال،
اگر متغیر
پوسته notify
را تنظیم
کنید،
پوسته شما
را
بلافاصله
از تغییرات
وضعیت
جابهای
پسزمینه
مطلع خواهد
کرد. همچنین
یک دستور
توکار به
نام notify
وجود دارد
که یک
پردازه
واحد را
علامتگذاری
میکند تا
تغییرات
وضعیت آن
بلافاصله
گزارش شود.
به طور
پیشفرض،
notify
پردازه
فعلی را
علامتگذاری
میکند؛
برای
علامتگذاری
جاب
پسزمینه
جهت گزارش
فوری
وضعیت،
کافی است پس
از شروع آن
عبارت
notifyهنگامی که تلاش میکنید در حین وجود کارهای متوقفشده از شل خارج شوید، این هشدار را دریافت خواهید کرد:
There are suspended
jobs.میتوانید
از دستور
jobs برای
مشاهده
آنها
استفاده
کنید. اگر
این کار را
انجام دهید
یا
بلافاصله
دوباره
برای خروج
تلاش کنید،
شل برای بار
دوم به شما
هشدار
نخواهد
داد، و
کارهای
تعلیقشده
خاتمه داده
خواهند شد.
رویدادهای خودکار، دورهای و زمانبندیشده (+)
روشهای گوناگونی برای اجرای خودکار دستورها و انجام سایر اقدامات در زمانهای مختلفی از “چرخه حیات” شل وجود دارد. این روشها در اینجا به طور خلاصه آورده شدهاند، و با جزئیات کامل در بخشهای مناسب دستورهای توکار (Builtin commands), متغیرهای ویژه شل (Special shell variables), و نامهای مستعار ویژه (+) (Special aliases (+)) شرح داده شدهاند.
دستور
توکار sched
دستورها را
در یک فهرست
رویدادهای
زمانبندیشده
قرار
میدهد تا
در یک زمان
مشخص توسط
شل اجرا
شوند.
نامهای
مستعار
ویژه (+) (Special aliases (+))
شامل beepcmd,
cwdcmd, jobcmd,
periodic, precmd, و
postcmd
میتوانند
به ترتیب
برای اجرای
دستورها
تنظیم شوند:
هنگامی که
شل
میخواهد
زنگ اخطار
را به صدا
درآورد،
هنگامی که
دایرکتوری
کاری تغییر
میکند،
هنگامی که
یک کار آغاز
میشود یا
به
پیشزمینه
آورده
میشود، هر
tperiod
دقیقه، پیش
از نمایش هر
پرامپت، و
پیش از
اینکه هر
دستور اجرا
شود.
متغیر شل
autologout
میتواند
طوری تنظیم
شود که پس از
تعداد
دقایق
مشخصی از
عدم
فعالیت، از
سیستم خارج
شده یا شل را
قفل کند.
متغیر شل
mail
میتواند
طوری تنظیم
شود که
بهطور
دورهای
ایمیلهای
جدید را
بررسی کند.
متغیر شل
printexitvalue
میتواند
برای چاپ
وضعیت خروج
دستوراتی
که با
وضعیتی غیر
از صفر خارج
میشوند،
تنظیم
گردد.
متغیر شل
rmstar
میتواند
تنظیم شود
تا هنگامی
که
rm *متغیر شل
time
میتواند
به گونهای
تنظیم شود
که پس از
اتمام هر
پردازشی که
بیش از
تعداد
ثانیههای
مشخصی از
پردازنده (CPU)
زمان برده
است، دستور
درونی time
را اجرا
کند.
متغیرهای
شل watch و
who
میتوانند
طوری تنظیم
شوند که
ورود یا
خروج
کاربران
انتخابشده
را گزارش
دهند، و
دستور
درونی log
وضعیت آن
کاربران را
در هر لحظه
گزارش
میکند.
پشتیبانی از سیستم زبان محلی (NLS) (+)
این شل
هشت-بیتی
پاک (8-bit clean) است
(در صورتی که
اینگونه
کامپایل
شده باشد؛
متغیر شل
version را
ببینید) و
بنابراین
از
مجموعههای
کاراکتری
که به این
قابلیت
نیاز
دارند،
پشتیبانی
میکند.
پشتیبانی NLS
بسته به
اینکه شل
برای
استفاده از
NLS سیستم
کامپایل
شده باشد یا
خیر متفاوت
است
(مجدداً،
version را
ببینید). در
هر صورت، کد
کاراکتری
پیشفرض
(مانند
دستهبندی
کاراکترهای
قابلچاپ) و
مرتبسازی،
اسکیِ
۷-بیتی (7-bit ASCII)
است، و
تغییر
متغیرهای
محیطی LANG
یا LC_CTYPE
باعث بررسی
تغییرات
احتمالی در
این
زمینهها
میشود.
هنگام
استفاده از
NLS سیستم،
تابع
setlocale(3)
برای تعیین
کدگذاری/دستهبندی
نویسهها و
ترتیب
مرتبسازی
مناسب
فراخوانی
میشود
(برای
نمونه، ‘en_CA.UTF-8’
منجر به
تعیین ‘UTF-8’
بهعنوان
کدگذاری
نویسه
خواهد شد).
این تابع
معمولاً
متغیرهای
محیطی LANG
و LC_CTYPE را
بررسی
میکند؛
برای
جزئیات
بیشتر به
مستندات
سیستم
مراجعه
کنید.
هنگامی که
از NLS سیستم
استفاده
نمیشود،
شل با فرض
اینکه
مجموعه
نویسههای ISO
8859-1 استفاده
میشود، در
صورت تنظیم
بودن هر یک
از
متغیرهای
LANG یا
LC_CTYPE
(صرفنظر از
مقدار
آنها)، آن
را
شبیهسازی
میکند.
مرتبسازی
تحت تأثیر NLS
شبیهسازیشده
قرار
نمیگیرد.
علاوه بر
این، چه با NLS
واقعی و چه
شبیهسازیشده،
تمام
نویسههای
قابل چاپ در
بازه \200-\377،
یعنی
آنهایی که
دارای
نگاشتهای
M-char
هستند،
بهطور
خودکار
دوباره به
self-insert-command متصل
میشوند.
نگاشت
مربوط به
توالی
escape-char (در
صورت وجود)
دستنخورده
باقی
میماند.
اگر متغیر
محیطی NOREBIND
تنظیم شده
باشد، این
نویسهها
دوباره
نگاشت
نمیشوند.
این ویژگی
ممکن است
برای NLS
شبیهسازیشده
یا یک NLS
واقعی
ابتدایی که
تمام ISO 8859-1 را
فرض
میکند،
مفید باشد.
در غیر این
صورت، تمام
نگاشتهای
M-char در
بازه \240-\377
عملاً لغو
میشوند.
البته
بازنگاشت
صریح
کلیدهای
مربوطه با
bindkey
همچنان
امکانپذیر
است.
نویسههای ناشناخته (یعنی آنهایی که نه قابل چاپ هستند و نه نویسه کنترلی) در قالب \nnn چاپ میشوند. اگر tty در حالت 8 بیتی نباشد، سایر نویسههای 8 بیتی با تبدیل شدن به ASCII و با استفاده از حالت standout چاپ میشوند. شل هرگز حالت 7/8 بیتی tty را تغییر نمیدهد و تغییرات اعمالشده توسط کاربر روی حالت 7/8 بیتی را دنبال میکند. کاربران NLS (یا کسانی که قصد استفاده از کلید meta را دارند) ممکن است نیاز داشته باشند tty را از طریق دستور مناسب stty(1) برای نمونه در فایل ~/.login بهطور صریح در حالت 8 بیتی تنظیم کنند.
پشتیبانی از انواع مختلف سیستمعامل (+)
تعدادی دستور توکار جدید جهت پشتیبانی از قابلیتها در سیستمعاملهای خاص ارائه شده است. همه آنها با جزئیات در بخش دستورهای توکار (Builtin commands) شرح داده شدهاند.
در
سیستمهایی
که از TCF
پشتیبانی
میکنند (aix-ibm370,
aix-ps2)،
دستورهای
getspath و setspath
مسیر اجرای
سیستم را
دریافت و
تنظیم
میکنند،
getxvers و setxvers
پیشوند
نگارش
آزمایشی را
دریافت و
تنظیم
مینمایند
و migrate
فرایندها
را بین
سایتها
جابهجا
میکند.
دستور
توکار jobs
سایتی را که
هر شغل در آن
در حال
اجراست چاپ
میکند.
در BS2000،
دستور bs2cmd
دستورات
سیستمعامل
پایهای BS2000/OSD
را اجرا
میکند.
در Domain/OS،
دستور inlib
کتابخانههای
اشتراکی را
به محیط
فعلی اضافه
میکند،
rootnode گره
ریشه (rootnode) را
تغییر
میدهد و
ver نوع
سیستم (systype) را
عوض
میکند.
در Mach،
دستور setpath
معادل
setpath(1) در Mach
است.
در Masscomp/RTU و Harris CX/UX،
دستور universe
جهان (universe) را
تنظیم
میکند.
در Harris CX/UX،
دستور ucb
یا att
دستوری را
در universe
مشخصشده
اجرا
میکند.
در Convex/OS،
دستور warp
جهان (universe) را
چاپ یا
تنظیم
میکند.
متغیرهای
محیطی VENDOR
، OSTYPE و
MACHTYPE به
ترتیب
نشاندهنده
فروشنده،
سیستمعامل
و نوع ماشین
(کلاس
ریزپردازنده
یا مدل
ماشین)
سیستمی
هستند که
پوسته تصور
میکند بر
روی آن در
حال اجرا
است. اینها
بهویژه
هنگام به
اشتراک
گذاشتن
دایرکتوری
خانگی میان
چندین نوع
ماشین
مختلف مفید
هستند؛
برای
نمونه،
میتوان
set path = (~/bin.$MACHTYPE /usr/ucb /bin /usr/bin .)
را در فایل ~/.login خود قرار داد و فایلهای اجرایی کامپایلشده برای هر ماشین را در دایرکتوری مناسب ذخیره کرد.
متغیر
پوستهای
version نشان
میدهد که
هنگام
کامپایل
پوسته، چه
گزینههایی
انتخاب
شدهاند.
همچنین به
دستور
توکار newgrp
،
متغیرهای
پوستهای
afsuser و echo_style
و مکانهای
وابسته به
سیستم
فایلهای
ورودی
پوسته توجه
کنید (بخش
فایلها
(FILES) را
ببینید).
مدیریت سیگنالها (Signal handling)
پوستههای
لاگین
هنگام
خواندن
فایل ~/.logout
وقفهها (interrupts)
را نادیده
میگیرند.
پوسته
سیگنالهای
خروج (quit signals) را
نادیده
میگیرد،
مگر اینکه
با گزینه
-q شروع
شده باشد.
پوستههای
لاگین
سیگنال
خاتمه (terminate signal) را
دریافت و
کنترل
میکنند،
اما
پوستههای
غیرلاگین
رفتار
خاتمه را از
والدین خود
به ارث
میبرند.
سایر
سیگنالها
مقادیری
دارند که
پوسته از
والد خود به
ارث برده
است.
در
اسکریپتهای
پوسته،
مدیریت
سیگنالهای
وقفه و
خاتمه توسط
پوسته را
میتوان با
دستور onintr
کنترل کرد،
و مدیریت
قطع ارتباط
(hangups) را
میتوان با
hup و nohup
کنترل
نمود.
پوسته با
دریافت
سیگنال قطع
ارتباط (hangup)
خارج
میشود
(همچنین
متغیر
پوستهای
logout را
ببینید).
بهطور
پیشفرض،
فرزندان
پوسته نیز
خارج
میشوند،
اما پوسته
هنگام خروج
خود برای
آنها
سیگنال قطع
ارتباط
ارسال
نمیکند.
دستور hup
ترتیبی
میدهد که
پوسته
هنگام
خروج، به یک
فرزند
سیگنال قطع
ارتباط
ارسال کند،
و دستور
nohup فرزند
را طوری
تنظیم
میکند که
سیگنالهای
قطع ارتباط
را نادیده
بگیرد.
مدیریت ترمینال (+)
پوسته از
سه مجموعه
حالت مختلف
برای
ترمینال
(“tty”)
استفاده
میکند:
حالت ‘edit’ که
هنگام
ویرایش
استفاده
میشود؛
حالت ‘quote’ که
هنگام
نقلقول
نویسههای
دقیق (literal)
استفاده
میشود؛ و
حالت ‘execute’ که
هنگام
اجرای
دستورها به
کار میرود.
پوسته برخی
از تنظیمات
را در هر
حالت ثابت
نگه
میدارد،
تا
دستورهایی
که tty را در
وضعیتی
آشفته رها
میکنند با
عملکرد
پوسته
تداخلی
نداشته
باشند.
پوسته
همچنین
تغییرات در
سرعت و
فاصلهگذاری
(padding) ترمینال tty
را همگام
میسازد.
فهرست
حالتهای tty
که ثابت نگه
داشته
میشوند را
میتوان با
دستور
توکار setty
مشاهده و
ویرایش کرد.
توجه داشته
باشید که
گرچه
ویرایشگر
از حالت CBREAK (یا
معادل آن)
استفاده
میکند،
اما در هر
صورت
نویسههای
ازپیشتایپشده
(typed-ahead) را
دریافت
مینماید.
دستورهای
echotc ، settc
و telltc
میتوانند
برای
دستکاری و
اشکالزدایی
قابلیتهای
ترمینال از
طریق خط
فرمان
استفاده
شوند.
در
سیستمهایی
که از SIGWINCH یا SIGWINDOW
پشتیبانی
میکنند،
پوسته
بهطور
خودکار با
تغییر
اندازه
پنجره
سازگار شده
و متغیرهای
محیطی LINES
و COLUMNS را در
صورت تنظیم
بودن
بهروزرسانی
میکند. اگر
متغیر
محیطی TERMCAP
حاوی
فیلدهای
‘li#’ و
‘co#’
باشد،
پوسته
آنها را
برای
بازتاب
اندازه
جدید پنجره
تنظیم
میکند.
مرجع (REFERENCE)
بخشهای بعدی این راهنما به توصیف تمامی دستورات داخلی (Builtin commands) ، نامهای مستعار ویژه (+) (Special aliases) ، و متغیرهای شل ویژه (Special shell variables) موجود میپردازند.
دستورات داخلی (Builtin commands)
%job- مترادفی
برای دستور
داخلی
fg. %job&- مترادفی
برای دستور
داخلی
bg. :- هیچ کاری انجام نمیدهد، با موفقیت.
@@name=expr@name[index] =expr@name++|--@name[index]++|--- حالت اول
مقادیر
تمام
متغیرهای
شل را چاپ
میکند.
حالت دوم مقدار expr را به name اختصاص میدهد.
حالت سوم مقدار expr را به مؤلفهٔ index-اُم از name اختصاص میدهد؛ هم name و هم مؤلفهٔ index-اُم آن باید از قبل وجود داشته باشند.
شناسهٔ expr میتواند حاوی عملگرهایی مانند ‘
* ،’ ‘+’ و غیره، مشابه با زبان C باشد. اگر expr شامل ‘< ،’ ‘> ،’ ‘&’ یا ‘|’ باشد، در این صورت دستکم آن بخش از expr باید میان (‘’ و ‘’) قرار گیرد. توجه داشته باشید که نحو expr هیچ ارتباطی با ساختار شرح داده شده در Expressions ندارد.فرمهای چهارم و پنجم مقدار name یا جزء indexام آن را افزایش (‘
++’) یا کاهش (‘--’) میدهند.فاصله میان ‘
@’ و name الزامی است. فاصلههای میان name و ‘=’ و همچنین بین ‘=’ و expr اختیاری هستند. اجزای expr باید توسط فاصله (space) از یکدیگر جدا شوند.
alias[name [wordlist]]- بدون
آرگومان،
تمام
نامهای
مستعار (aliasها)
را چاپ
میکند.
با name ، نام مستعار مربوط به name را چاپ میکند.
با name و wordlist ، محتوای wordlist را به عنوان نام مستعار برای name تعیین میکند. روی wordlist جایگزینی دستور و نام فایل انجام میشود.
مقدار name نمیتواند ‘
alias’ یا ‘unalias’ باشد. همچنین دستور توکارunaliasرا ببینید. alloc- مقدار حافظه پویای اختصاصیافته را به تفکیک حافظه مصرفی و آزاد نمایش میدهد. همراه با یک آرگومان، تعداد بلوکهای آزاد و مصرفشده را در هر رده اندازه نشان میدهد. اندازه ردهها از ۸ شروع شده و در هر گام دو برابر میشود. خروجی این دستور ممکن است در انواع سیستمها متفاوت باشد، چرا که سیستمهای غیر از VAX ممکن است از تخصیصدهنده حافظه متفاوتی استفاده کنند.
bg[%job ...]- کارهای
مشخصشده
(یا در صورت
عدم وجود
آرگومان،
کار فعلی)
را به
پسزمینه
میبرد و در
صورت متوقف
بودن هر یک،
اجرای
آنها را
ادامه
میدهد.
job
میتواند
یک عدد، یک
رشته، ‘
،’ ‘% ،’ ‘+’ یا ‘-’ باشد، همانگونه که در بخش Jobs شرح داده شده است.
bindkey[-l|-d|-e|-v|-u] (+)bindkey[-a] [-b] [-k] [-r] [--] key (+)bindkey[-a] [-b] [-k] [-c|-s] [--] key command (+)- شکل اول یا
تمام
کلیدهای
مقیدشده و
دستور
ویرایشگری
را که هر یک
به آن مقید
شدهاند
فهرست
میکند،
توضیحی از
دستورها را
فهرست
مینماید،
یا تمام
کلیدها را
به یک حالت
خاص مقید
میسازد.
شکل دوم دستور ویرایشگری را فهرست میکند که key به آن مقید شده است.
شکل سوم دستور ویرایشگر command را به key مقید میکند.
گزینههای پشتیبانیشدهٔ
bindkey:- Option
bindkeydescription-a- کلیدهای
مقیدشده
را در
نگاشت
کلید
جایگزین (alternative
key map) فهرست
کرده یا
تغییر
میدهد.
این همان
نگاشت
کلیدی است
که در حالت
دستور
vimodeاستفاده میشود. -b- key
بهعنوان
یک نویسهٔ
کنترلی
بهصورت
^character (مانند^A) یاC-character (مانندC-A)،یک نویسهٔ متا بهصورتM-character (مانندM-A)،یک کلید تابعی بهصورتF-string (مانندF-string)،یا یک کلید پیشوند گسترشیافته بهصورتX-character (مانندX-A) تفسیر میشود. -c- command به جای یک دستور ویرایشگر، به عنوان یک دستور توکار یا خارجی تفسیر میشود.
-d- همه
کلیدها را
به
نگاشتهای
استاندارد
برای
ویرایشگر
پیشفرض
پیوند
میدهد،
همانطور
که در
-eو-vآمده است. -e- همه
کلیدها را
به
نگاشتهایی
به سبک
emacs(1)
پیوند
میدهد.
vimodeرا لغو میکند. -k- key به عنوان نام نمادین یک کلید جهتنما تفسیر میشود، که میتواند یکی از ‘down ،’ ‘up ،’ ‘left’ یا ‘right’ باشد.
-l- تمام دستورات ویرایشگر و توضیح کوتاهی از هر یک را فهرست میکند.
-r- پیوند key
را حذف
میکند.
مراقب
باشید:
‘
bindkey -r’ key را بهself-insert-commandپیوند نمیدهد ، بلکه پیوند key را کاملاً لغو میکند. -s- هنگام فشرده شدن key، command به عنوان یک رشته لفظی در نظر گرفته شده و مانند ورودی ترمینال با آن رفتار میشود. کلیدهای مقید در command خودشان دوباره تفسیر میشوند، و این عمل تا ده سطح از تفسیر ادامه مییابد.
-u(یا هر گزینه نامعتبر دیگری)- پیام نحوه استفاده (راهنما) را چاپ میکند.
-v- تمام
کلیدها را
با
اتصالات
به سبک
vi(1)
پیوند
میزند.
متغیر
vimodeرا تنظیم میکند. --- پردازش
گزینهها
را متوقف
میکند،
بهطوری
که کلمه
بعدی به
عنوان key
در نظر
گرفته
میشود،
حتی اگر با
‘
-’ شروع شود.
key میتواند یک نویسه منفرد یا یک رشته باشد. اگر دستوری به یک رشته متصل شود، اولین نویسه رشته به
sequence-lead-inمتصل شده و کل رشته به دستور متصل میشود.نویسههای کنترلی در key میتوانند بهصورت نویسه عینی (literal) باشند (میتوان آنها را با درج دستور ویرایشگر
quoted-insertقبل از آنها تایپ کرد که معمولاً به^Vمتصل است) یا به سبک نویسه-کَرِت (caret-character) نوشته شوند، مانند^A. کلید Delete بهصورت^?(کَرِت-علامت سؤال) نوشته میشود. key و command میتوانند حاوی توالیهای گریز با بکاسلش (به سبک echo(1) در System V) به شرح زیر باشند:- گریز
- توضیحات
\a- زنگ (Bell).
\b- Backspace.
\e- Escape.
\f- Form feed.
\n- خط جدید (Newline).
\r- Carriage return.
\t- تب افقی (Horizontal tab).
\v- تب عمودی (Vertical tab).
\nnn- نویسه ASCII متناظر با عدد هشتهشتی nnn.
‘
\’ معنای ویژه نویسه بعدی را، در صورت وجود، بیاثر میکند؛ بهویژه ‘\’ و ‘^’.
bs2cmdbs2000-command (+)- دستور bs2000-command را برای اجرا به مفسر دستور BS2000 ارسال میکند. تنها دستورهای غیرتعاملی قابل اجرا هستند و امکان اجرای هیچ دستوری که تصویر حافظه فرایند فعلی را جایگزین کند، مانند /EXECUTE یا /CALL-PROCEDURE، وجود ندارد. (فقط در BS2000)
break- باعث ادامه
یافتن اجرا
پس از
endدر نزدیکترینforeachیاwhileدربرگیرنده میشود. باقیمانده دستورات روی خط فعلی اجرا میشوند. بنابراین خروجهای چندسطحی (Multi-level breaks) با نوشتن همه آنها روی یک خط امکانپذیر است. breaksw- باعث خروج
از یک
switchشده و اجرای دستورات را پس ازendswادامه میدهد. builtins(+)- نام تمام دستورات توکار را چاپ میکند.
bye(+)- مترادفی
برای دستور
توکار
logout. تنها در صورتی در دسترس است که شل با این قابلیت کامپایل شده باشد؛ متغیر شلversionرا بررسی کنید. caselabel:- یک برچسب در
دستور
switchهمانطور که در ادامه توضیح داده شده است. cd[-p] [-l] [-n|-v] [--] [name]- اگر یک
دایرکتوری
با name
داده شود،
دایرکتوری
کاری شل را
به name
تغییر
میدهد. در
غیر این
صورت، به
homeتغییر میدهد، مگر اینکه متغیرcdtohomeتنظیم نشده باشد، که در این حالت یک name الزامی خواهد بود. اگر name برابر با ‘-’ باشد، به عنوان دایرکتوری کاری پیشین تفسیر میشود (به بخش Other substitutions (+) مراجعه کنید). (+) اگر name یک زیردایرکتوری از دایرکتوری فعلی نباشد (و با ‘/ ،’ ‘./’ یا ‘../’ آغاز نشود)، هر مولفه از متغیرcdpathبررسی میشود تا مشخص شود که آیا دارای زیردایرکتوری name هست یا خیر. در نهایت، اگر تمام موارد ناموفق بود اما name یک متغیر شل باشد که مقدار آن با ‘/’ یا ‘.’ شروع میشود، بررسی میشود که آیا این مقدار یک دایرکتوری است یا خیر، و گزینه-pنیز اعمال میشود.با
-p-،پشتهٔ دایرکتوری نهایی را چاپ میکند، درست مانندdirs. فلگهای-l-،-nو-vهمان اثری را رویcdدارند که رویdirsدارند، و آنها به معنای استفادهٔ ضمنی از-pهستند (+). استفاده از--باعث توقف پردازش گزینهها میشود، بنابراین کلمه بعدی حتی اگر با ‘-’ شروع شود، به عنوان name دایرکتوری در نظر گرفته میشود (+).همچنین متغیرهای پوستهٔ
implicitcdوcdtohomeرا ببینید. chdir- مترادفی
برای دستور
توکار
cd. complete[command [word/pattern/list[:select]/[[suffix]/] ...]] (+)- بدون
آرگومان،
تمام
تکمیلها
(completions) را فهرست
میکند.
به همراه command ، کاملسازیها را برای command فهرست میکند.
به همراه command و word ...، کاملسازیها را تعریف میکند.
command میتواند یک نام کامل دستور یا یک الگوی انطباق (glob-pattern) باشد (به جایگزینی نام فایل (Filename substitution) مراجعه کنید). میتواند با ‘
-’ شروع شود تا نشان دهد که کاملسازی فقط زمانی باید استفاده شود کهcommandمبهم باشد.word مشخص میکند که کدام کلمه نسبت به کلمه فعلی باید کامل شود، و میتواند یکی از موارد زیر باشد:
- word
- کلمه کاملسازی
c- کاملسازی کلمه فعلی. pattern یک الگوی انطباق (glob-pattern) است که باید با ابتدای کلمه فعلی در خط فرمان مطابقت داشته باشد. pattern هنگام کاملسازی کلمه فعلی نادیده گرفته میشود.
C- مانند ‘
c ،’ اما شامل pattern هنگام کاملسازی کلمه فعلی میشود. n- کاملسازی کلمه بعدی. pattern یک الگوی انطباق (glob-pattern) است که باید با ابتدای کلمه قبلی در خط فرمان مطابقت داشته باشد.
N- مانند ‘
n ،’ اما باید با ابتدای کلمهٔ دوتا قبل از کلمهٔ فعلی مطابقت داشته باشد. p- تکمیل وابسته به موقعیت. pattern یک بازهٔ عددی است، با همان نحو به کار رفته برای نمایهگذاری متغیرهای shell، که باید کلمهٔ فعلی را شامل شود.
list ، فهرست موارد ممکن برای تکمیل، میتواند یکی از مقادیر زیر باشد:
- list
- قلم تکمیل
a- نامهای مستعار (Aliases).
b- اتصال کلیدها (دستورات ویرایشگر).
c- دستورات (دستورات توکار یا خارجی).
C- دستورات خارجی که با پیشوند مسیر ارائه شده آغاز میشوند.
d- دایرکتوریها.
D- دایرکتوریهایی که با پیشوند مسیر ارائه شده آغاز میشوند.
e- متغیرهای محیطی.
f- نامهای فایل.
F- نامهای فایلی که با پیشوند مسیر ارائه شده آغاز میشوند.
g- نامهای گروه.
j- کارها (Jobs).
l- حدود (Limits).
n- هیچچیز.
s- متغیرهای شل.
S- سیگنالها.
t- فایلهای (“متنی”) ساده.
T- فایلهای (“متنی”) سادهای که با پیشوند مسیر ارائهشده آغاز میشوند.
v- هر متغیری.
u- نامهای کاربری.
x- مانند ‘
n ،’ اما در صورت استفاده ازlist-choicesعبارت select را چاپ میکند. X- کاملسازیها (Completions).
$var- کلمات برگرفته از متغیر var.
(...)- کلمات برگرفته از فهرست ارائهشده.
`...`- کلمات برگرفته از خروجی دستور.
شناسه select یک الگوی glob اختیاری است. در صورت تعیین، تنها کلماتی از list که با select تطابق داشته باشند در نظر گرفته میشوند و متغیر پوسته
fignoreنادیده گرفته میشود. انواع list شامل ‘$var ،’ ‘(...)’ و ‘`...`’ نمیتوانند الگوی select داشته باشند، و ‘x’ از select بهعنوان یک پیام توضیحی هنگام استفاده از دستور ویرایشگرlist-choicesاستفاده میکند.شناسه suffix یک تکنویسه است که در صورت تکمیل موفقیتآمیز، به انتهای آن الحاق میشود. اگر تهی باشد، هیچ نویسهای اضافه نمیشود. در صورت حذف (که در این حالت میتوان جداکننده چهارم را نیز حذف کرد)، یک اسلش به دایرکتوریها و یک فاصله به سایر کلمات الحاق میشود.
دستور command که از list ‘
`...`’ فراخوانی میشود، دارای متغیر محیطی اضافیCOMMAND_LINEاست که (همانطور که از نامش پیداست) محتویات خط فرمان فعلی (که قبلاً تایپ شده) را در خود دارد. میتوان محتویات متغیر محیطیCOMMAND_LINEرا در یک اسکریپت سفارشی بررسی و استفاده کرد تا تکمیلهای پیشرفتهتری ساخت (تکمیل مربوط به svn(1) را که در این بسته گنجانده شده است ببینید).حال چند مثال میآوریم. برخی دستورها تنها دایرکتوریها را به عنوان آرگومان میپذیرند، بنابراین کامل کردن فایلهای عادی بیمعنی است.
> complete cd 'p/1/d/'
تنها کلمه اول پس از ‘
cd’ را (‘p/1’) با یک دایرکتوری کامل میکند. تکمیل از نوع ‘p’میتواند برای محدود کردن تکمیل دستورها نیز به کار رود:> co[^D] complete compress > complete -co* 'p/0/(compress)/' > co[^D] > compress
این تکمیل، دستورهایی (کلمات در موقعیت ۰، ‘
p/0’) را که با ‘co’ شروع میشوند (و در نتیجه با ‘co*’ تطبیق مییابند) به ‘compress’ (تنها کلمه موجود در فهرست) کامل میکند. نویسه ‘-’ در ابتدا مشخص میکند که این تکمیل تنها برای دستورهای مبهم استفاده شود.> complete find 'n/-user/u/'
نمونهای از تکمیل از نوع ‘
n’است. هر کلمهای پس از ‘find’ که بلافاصله پس از ‘-user’ بیاید، از فهرست کاربران کامل میشود.> complete cc 'c/-I/d/'
تکمیل از نوع ‘
c’ را نشان میدهد. هر کلمهای پس از ‘cc’ که با ‘-I’ شروع شود، به عنوان یک دایرکتوری تکمیل میشود. ‘-I’ به عنوان بخشی از دایرکتوری در نظر گرفته نمیشود، زیرا ما از ‘c’ کوچک استفاده کردهایم.مجموعههای list متفاوت با دستورهای مختلف کاربردی هستند.
> complete alias 'p/1/a/' > complete man 'p/*/c/' > complete set 'p/1/s/' > complete true 'p/1/x:Truth has no options./'
اینها کلماتِ پس از ‘
alias’ را با نامهای مستعار (aliasها)، ‘man’ را با دستورها، و ‘set’ را با متغیرهای شل تکمیل میکنند. دستورtrueهیچ گزینهای ندارد، بنابراین ‘x’ هنگام تلاش برای تکمیل هیچ کاری انجام نمیدهد و هنگام فهرست کردن گزینههای تکمیل،را چاپ میکند.Truth has no options.توجه داشته باشید که در مثال ‘
man’ و چندین مثال دیگر در ادامه، میتوانست به همان اندازه بهجای ‘'p/*'’ از ‘'c/*'’ یا ‘'n/*'’ نیز استفاده شود.کلمات را میتوان از متغیری که در زمان تکمیل ارزیابی میشود کامل کرد،
> complete ftp 'p/1/$hostnames/' > set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu) > ftp [^D] rtfm.mit.edu tesla.ee.cornell.edu > ftp [^C] > set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net) > ftp [^D] rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net
یا از دستوری که در زمان تکمیل اجرا میشود:
> complete kill 'p/*/`ps | awk \{print\ \$1\}`/' > kill -9 [^D] 23113 23377 23380 23406 23429 23529 23530 PIDتوجه داشته باشید که دستور
completeخودش آرگومانهایش را کوت (نقلقول) نمیکند، بنابراین آکولادها، فاصله و ‘$’ در ‘{print $1}’ باید به صورت صریح کوتگذاری شوند.یک دستور میتواند چندین حالت تکمیل داشته باشد:
> complete dbx 'p/2/(core)/' 'p/*/c/'
دومین آرگومان ‘
dbx’ را با کلمه ‘core’ و بقیه آرگومانها را با دستورات تکمیل میکند. توجه داشته باشید که تکمیل وابسته به موقعیت، قبل از تکمیل کلمه بعدی مشخص شده است. از آنجا که تکمیلها از چپ به راست ارزیابی میشوند، اگر تکمیل کلمه بعدی ابتدا مشخص میشد، همیشه مطابقت پیدا میکرد و تکمیل وابسته به موقعیت هرگز اجرا نمیشد. این یک اشتباه رایج هنگام تعریف تکمیل است.الگوی select زمانی مفید است که یک دستور فقط فایلهایی با فرمهای خاص را به عنوان آرگومان میپذیرد. برای نمونه،
> complete cc 'p/*/f:*.[cao]/'
آرگومانهای ‘
cc’ را فقط به فایلهایی که به ‘.c ،’ ‘.a’ یا ‘.o’ ختم میشوند، تکمیل میکند. select همچنین میتواند با استفاده از نفی یک الگوی عمومی (glob-pattern)، همانطور که در بخش جایگزینی نام فایل (Filename substitution) توضیح داده شده است، فایلها را مستثنی کند. میتوان از دستور زیر استفاده کرد:> complete rm 'p/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/'برای مستثنی کردن کدهای منبع ارزشمند از تکمیل خودکار ‘
rm’ استفاده کرد. البته همچنان میتوان نامهای مستثنیشده را به صورت دستی تایپ کرد یا با استفاده از دستورهای ویرایشگرcomplete-word-rawیاlist-choices-rawسازوکار تکمیل خودکار را نادیده گرفت.فهرستهای list شامل ‘
C ،’ ‘D ،’ ‘F’ و ‘T’ به ترتیب مانند ‘c ،’ ‘d ،’ ‘f’ و ‘t’ هستند، اما از آرگومان select به شیوهای متفاوت استفاده میکنند: برای محدود کردن تکمیل به فایلهایی که با یک پیشوند مسیر خاص آغاز میشوند. برای نمونه، برنامه ایمیل Elm از ‘=’ به عنوان کوتهنوشتی برای دایرکتوری ایمیل کاربر استفاده میکند. میتوان از دستور زیر استفاده کرد:> complete elm c@=@F:$HOME/Mail/@
تا
را طوری تکمیل کند که گویی عبارت زیر بوده است:elm -f =توجه داشته باشید که برای جلوگیری از تداخل با آرگومان select به جای ‘elm -f ~/Mail//’ از جداکننده ‘@’ استفاده کردیم، و همچنین به جای ‘~’ از ‘$HOME’ استفاده شد زیرا جایگزینی دایرکتوری خانگی تنها در ابتدای کلمه کار میکند.شناسهٔ suffix برای افزودن یک پسوند غیر استاندارد (غیر از فاصله یا ‘
/’ برای دایرکتوریها) به کلمات تکمیلشده به کار میرود.> complete finger 'c/*@/$hostnames/' 'p/1/u/@'
آرگومانهای ‘
finger’ را از فهرست کاربران تکمیل میکند، یک ‘@’ میافزاید، و سپس بعد از ‘@’ را از متغیر ‘hostnames’ تکمیل مینماید. دوباره به ترتیبی که تکمیلها مشخص شدهاند دقت کنید.در نهایت، این یک مثال پیچیده برای ایده گرفتن است:
> complete find \ 'n/-name/f/' 'n/-newer/f/' 'n/-{,n}cpio/f/' \ ´n/-exec/c/' 'n/-ok/c/' 'n/-user/u/' \ 'n/-group/g/' 'n/-fstype/(nfs 4.2)/' \ 'n/-type/(b c d f l p s)/' \ ´c/-/(name newer cpio ncpio exec ok user \ group fstype type atime ctime depth inum \ ls mtime nogroup nouser perm print prune \ size xdev)/' \ 'p/*/d/'این دستور کلمات پس از ‘
-name ،’ ‘-newer ،’ ‘-cpio’ یا ‘-ncpio’ (به الگویی که هر دو را مطابقت میدهد دقت کنید) را به فایلها، کلمات پس از ‘-exec’ یا ‘-ok’ را به دستورات، کلمات پس از ‘-user’ و ‘-group’ را به ترتیب به کاربران و گروهها، و کلمات پس از ‘-fstype’ یا ‘-type’ را به اعضای فهرستهای دادهشده تکمیل میکند. همچنین خود سوییچها را از فهرست ارائهشده تکمیل مینماید (به استفاده از تکمیل از نوع ‘c’دقت کنید) و هر چیز دیگری که به نحو دیگری تکمیل نشده باشد را به یک دایرکتوری تکمیل میکند. هوف!به یاد داشته باشید که اگر کلمه در حال تکمیل یک جایگزینی مد (شروع با ‘
~’) یا یک متغیر (شروع با ‘$’) باشد، تکمیلهای برنامهریزیشده نادیده گرفته میشوند. همچنین به دستور توکارuncompleteمراجعه کنید. continue- اجرای
نزدیکترین
whileیاforeachدر بر گیرنده را ادامه میدهد. باقی دستورات در خط جاری اجرا میشوند. default:- حالت
پیشفرض را
در یک عبارت
switchبرچسبگذاری میکند. این مورد باید بعد از تمام برچسبهایcaseقرار گیرد.
dirs[-l] [-n|-v]dirs-S|-L[filename] (+)dirs-c(+)- شکل اول
پشتهٔ
دایرکتوری
(directory stack) را چاپ
میکند.
بالای پشته
در سمت چپ
قرار دارد و
اولین
دایرکتوری
در پشته،
دایرکتوری
فعلی است.
با
-l-،علامت ‘~’ یا ‘~name’ در خروجی بهطور صریح بهhomeیا مسیر کامل دایرکتوری خانگی کاربر name بسط داده میشود. (+) با-n-،ورودیها قبل از رسیدن به لبهٔ صفحه شکسته (wrap) میشوند. (+) با-v-،ورودیها هر کدام در یک خط و با ذکر موقعیتشان در پشته چاپ میشوند. (+) اگر بیش از یکی از گزینههای-nیا-vداده شود،-vاولویت دارد.-pپذیرفته میشود اما کاری انجام نمیدهد.شکل دوم با
-Sپشتهٔ دایرکتوری را در filename بهصورت مجموعهای از دستورهایcdوpushdذخیره میکند. شکل دوم با-Lفایل filename را source میکند، که احتمالاً یک فایل پشتهٔ دایرکتوری ذخیرهشده توسط گزینهٔ-Sیا سازوکارsavedirsاست. در هر دو حالت، اگر filename داده نشده باشد ازdirsfileاستفاده میشود و اگرdirsfileتنظیم نشده باشد، از ~/.cshdirs استفاده میگردد.توجه داشته باشید که شلهای لاگین در هنگام راهاندازی، معادل
را اجرا میکنند و اگرdirs -Lsavedirsتنظیم شده باشد، قبل از خروج،را اجرا مینمایند. از آنجا که بهطور معمول تنها ~/.tcshrc قبل از ~/.cshdirs خوانده (source) میشود،dirs -Sdirsfileباید در ~/.tcshrc تنظیم گردد، نه در ~/.login.شکل سوم، پشتهٔ دایرکتوری را پاک میکند.
echo[-n] word ...- هر word را
در خروجی
استاندارد
شل
مینویسد
که با فاصله
از هم جدا
شده و به یک
خط جدید ختم
میشوند.
متغیر شل
echo_styleمیتواند برای شبیهسازی (یا عدم شبیهسازی) فلگها و توالیهای گریز (escape sequences) نسخههای BSD و/یا System V از echo(1) تنظیم شود؛ نگاه کنید به توالیهای گریز (+) و echo(1). echotc[-sv] arg ... (+)- قابلیتهای
ترمینال
(نگاه کنید
به termcap(5))
را در arg
به کار
میگیرد.
برای
نمونه،
مکاننما را به موقعیت خانه (home) میبرد،
echotc homeآن را به ستون ۳ و سطر ۱۰ میبرد، وechotc cm 3 10متنechotc ts 0; echo "This is a test."; echotc fsرا در خط وضعیت چاپ میکند.This is a test.اگر arg برابر با ‘
baud ،’ ‘cols ،’ ‘lines ،’ ‘meta’ یا ‘tabs’ باشد، مقدار آن قابلیت را چاپ میکند (“yes” یا “no” که نشان میدهد ترمینال آن قابلیت را دارد یا ندارد). میتوان از این قابلیت برای کاهش پرگویی خروجی یک اسکریپت شل در ترمینالهای کند، یا محدود کردن خروجی دستور به تعداد خطوط صفحه نمایش استفاده کرد:> set history=`echotc lines` > @ history--
رشتههای Termcap ممکن است حاوی نویسههای عام (wildcard) باشند که بهدرستی بازتاب داده نمیشوند. هنگام تنظیم یک متغیر شل روی رشته قابلیت ترمینال، باید از نقلقول دوگانه (double quotes) استفاده شود، مانند مثال زیر که تاریخ را در خط وضعیت قرار میدهد:
> set tosl="`echotc ts 0`" > set frsl="`echotc fs`" > echo -n "$tosl";date; echo -n "$frsl"
با
-s-،قابلیتهای ناموجود به جای ایجاد خطا، رشته خالی برمیگردانند. با-v-،پیامها بهصورت پرگو (verbose) خواهند بود.
evalarg ...- آرگومانها
را به عنوان
ورودی شل در
نظر گرفته و
دستور(های)
حاصل را در
بستر شل
فعلی اجرا
میکند. این
مورد
معمولاً
برای اجرای
دستورهایی
به کار
میرود که
در نتیجهٔ
جایگزینی
متغیر یا
دستور
ایجاد
شدهاند،
چرا که
تجزیهٔ
دستوری (parsing)
پیش از این
جایگزینیها
انجام
میگیرد.
برای
نمونهای
از کاربرد
evalبه tset(1) مراجعه کنید. execcommand ...- دستور command مشخصشده را به جای شل فعلی اجرا میکند.
exit[expr]- شل با مقدار عبارت مشخصشدهٔ expr (یک عبارت، همانطور که در Expressions توضیح داده شده است) یا در صورت عدم وجود expr ، با مقدار 0 خارج میشود.
fg[%job ...]- کارهای
مشخصشده
(یا در صورت
عدم وجود
آرگومان،
کار فعلی)
را به
پیشزمینه
(foreground)
میآورد، و
در صورت
متوقف بودن
هر یک،
اجرای آن را
ادامه
میدهد.
job
میتواند
یک عدد، یک
رشته، ‘
،’ ‘% ،’ ‘+’ یا ‘-’ باشد، همانطور که در Jobs شرح داده شده است. همچنین دستور ویرایشگرrun-fg-editorرا ببینید. filetest -op file ... (+)- عملگر op را (که یک عملگر استعلام فایل است، همانطور که در File inquiry operators توضیح داده شده) بر روی هر file اعمال کرده و نتایج را به صورت یک فهرست جدا شده با فاصله بازمیگرداند.
foreachname(wordlist)...end- متغیر name
را به طور
متوالی با
هر یک از
اعضای wordlist
مقداردهی
کرده و
توالی
دستورات
بین این
دستور و
endمتناظر با آن را اجرا میکند. (هر دو دستورforeachوendباید به تنهایی در خطوط جداگانه قرار گیرند.) دستور توکارcontinueمیتواند برای ادامه دادن پیشازموعد حلقه استفاده شود و دستور توکارbreakبرای پایان دادن پیشازموعد آن به کار میرود. هنگامی که این دستور از ترمینال خوانده میشود، پیش از اجرای هر گزارهای در حلقه، کل حلقه با اعلان(یاforeach?prompt2) یک بار خوانده میشود. اگر هنگام تایپ یک حلقه در ترمینال مرتکب اشتباهی شدید، میتوانید آن را پاک کنید.
getspath(+)- مسیر اجرای سیستم را چاپ میکند. (فقط در TCF)
getxvers(+)- پیشوند نسخه آزمایشی را چاپ میکند. (تنها در TCF)
globword ...- مانند
echoاست، اما پارامتر-nشناخته نمیشود و کلمات در خروجی با نویسههای تهی (null) از هم جدا میشوند. برای برنامههایی که میخواهند از پوسته برای بسط نام فایلِ فهرستی از کلمات استفاده کنند، مفید است. gotoword- روی word
جایگزینی
نام فایل و
دستور
انجام
میشود تا
رشتهای به
شکل ‘label’
حاصل شود.
پوسته
ورودی خود
را تا حد
امکان به
عقب
برمیگرداند،
به دنبال
خطی به فرم
(که ممکن است قبل از آن فاصلهها یا تبها قرار داشته باشند) میگردد، و اجرا را پس از آن خط ادامه میدهد.
label: hashstat- یک خط آماری
را چاپ
میکند که
نشان
میدهد
جدول هش
درونی تا چه
اندازه در
مکانیابی
دستورها (و
جلوگیری از
فراخوانیهای
exec) مؤثر بوده است. به ازای هر بخش ازpathکه تابع هش وجود احتمالی را نشان دهد، و در هر بخشی که با ‘/’ شروع نشود، یکexecامتحان میشود.در ماشینهای بدون vfork(2) ، فقط تعداد و اندازه باکتهای (buckets) هش را چاپ میکند.
history[-hTr] [n]history-S|-L|-M[filename] (+)history-c(+)- فرم اول
فهرست
رویدادهای
تاریخچه را
چاپ میکند.
اگر n
داده شود،
تنها n
رویداد
اخیر چاپ یا
ذخیره
میشوند.
همراه با
-h-،فهرست تاریخچه بدون شمارههای ابتدایی چاپ میشود. اگر-Tمشخص شده باشد، برچسبهای زمانی نیز در قالب کامنت چاپ میشوند. این قابلیت میتواند برای تولید فایلهای مناسب جهت بارگذاری بایاhistory -Lاستفاده شود.source -hهمراه با
-r-،ترتیب چاپ به جای قدیمیترینها در ابتدا، جدیدترینها در ابتدا خواهد بود.فرم دوم با
-Sفهرست تاریخچه را در filename ذخیره میکند. اگر کلمه اول متغیر شلsavehistبر روی یک عدد تنظیم شده باشد، حداکثر به همان تعداد خط ذخیره میشود. اگر کلمه دومsavehistروی ‘merge’ تنظیم شده باشد، فهرست تاریخچه به جای جایگزین شدن، با فایل تاریخچه موجود ادغام شده (در صورت وجود) و بر اساس برچسب زمانی مرتب میشود. (+) قابلیت ادغام برای محیطهایی مانند X Window System با چندین شل که همزمان استفاده میشوند در نظر گرفته شده است. اگر کلمه دومsavehistبرابر ‘merge’ و کلمه سوم روی ‘lock’ تنظیم شده باشد، بهروزرسانی فایل تاریخچه با سایر نشستهای شل که ممکن است دقیقاً در همان زمان قصد ادغام تاریخچه را داشته باشند، بهصورت سریالی انجام خواهد شد.شکل دوم با
-Lمحتویات filename (که احتمالاً یک فهرست تاریخچه ذخیره شده توسط گزینه-Sیا سازوکارsavehistاست) را به فهرست تاریخچه ضمیمه میکند.-Mمشابه-Lاست، اما محتویات filename در فهرست تاریخچه ادغام شده و بر اساس برچسب زمان مرتب میشوند. در هر دو حالت، اگر filename مشخص نشده باشد ازhistfileاستفاده میشود و اگرhistfileتنظیم نشده باشد، ~/.history به کار میرود.توجه داشته باشید که
دقیقاً مانندhistory -Lعمل میکند، با این تفاوت که نیازی به نام فایل ندارد.source -hتوجه داشته باشید که شلهای لاگین در هنگام راهاندازی معادل دستور
و در صورت تنظیم بودنhistory -Lsavehist ،پیش از خروج معادل دستوررا اجرا میکنند. از آنجا که به طور معمول فقط ~/.tcshrc پیش از ~/.history فراخوانی (source) میشود،history -Shistfileباید در ~/.tcshrc تنظیم شود و نه در ~/.login.اگر
histlitتنظیم شده باشد، فرمهای اول و دوم شکل تحتاللفظی (بسطنیافته) فهرست تاریخچه را چاپ و ذخیره میکنند.فرم سوم فهرست تاریخچه را پاک میکند.
hup[command] (+)- همراه با
command ،
دستور command
را به
گونهای
اجرا
میکند که
هنگام
دریافت
سیگنال قطع
ارتباط (hangup)
خارج شود و
ترتیبی
میدهد که
شل هنگام
خروج خود،
یک سیگنال
قطع ارتباط
به آن ارسال
کند. توجه
داشته
باشید که
ممکن است
دستورها
پاسخ خود را
به قطع
ارتباط
تنظیم کرده
و
hupرا نادیده بگیرند. بدون آرگومان، فقط باعث میشود شلِ غیرتعاملی برای باقیماندهٔ اسکریپت هنگام قطع ارتباط خارج شود. همچنین ببینید مدیریت سیگنال (Signal handling) و دستور توکارnohupرا. if(expr)command- اگر expr (یک
عبارت،
همانطور
که در زیر
عبارات
(Expressions) توضیح
داده شده
است) درست
ارزیابی
شود، آنگاه
command اجرا
میشود.
جایگزینی
متغیرها
روی command
زودتر و
همزمان با
بقیهٔ
دستورِ
ifانجام میشود. command باید یک دستور ساده باشد، نه یک نام مستعار (alias)، یک خط لوله (pipeline)، یک فهرست دستورات یا یک فهرست دستورات داخل پرانتز؛ اما میتواند آرگومان داشته باشد. تغییر مسیر ورودی/خروجی رخ میدهد حتی اگر expr نادرست باشد و در نتیجه command اجرا نشود ؛ این یک باگ است.
if(expr) then...else if(expr2) then...else...endif- اگر expr
مشخصشده
درست باشد،
دستورات تا
اولین
elseاجرا میشوند؛ در غیر این صورت اگر expr2 درست باشد دستورات تا دومینelseاجرا میگردند و به همین ترتیب. هر تعداد جفتelse ifامکانپذیر است؛ تنها یکendifمورد نیاز است. بخشelseنیز به همین ترتیب اختیاری است. (کلماتelseوendifباید در ابتدای خطوط ورودی ظاهر شوند؛ifباید به تنهایی در خط ورودی خود یا پس از یکelseقرار گیرد.)
inlibshared-library ... (+)- هر shared-library را به محیط فعلی اضافه میکند. هیچ راهی برای حذف یک کتابخانه مشترک وجود ندارد. (فقط Domain/OS)
jobs[-l]jobs-Z[title] (+)- شکل اول
کارهای
فعال را
فهرست
میکند.
همراه با
-l-،شناسههای فرایند (PID) را علاوه بر اطلاعات عادی فهرست میکند. در سیستمهای TCF، پایگاهی (site) که هر کار بر روی آن در حال اجرا است را چاپ میکند.شکل دوم همراه با گزینهٔ
-Zعنوان فرایند را در صورت در دسترس بودن با استفاده از setproctitle(3) روی title تنظیم میکند. اگر هیچ title مشخص نشده باشد، عنوان فرایند پاک خواهد شد. kill-lkill[-ssignal]%job|pid ...- شکل اول
نامهای
سیگنالها
را فهرست
میکند.
شکل دوم signal مشخصشده (یا در صورت عدم تعیین، سیگنال TERM (خاتمه)) را به کارها یا فرایندهای مشخصشده ارسال میکند. job میتواند یک عدد، یک رشته، ‘
’, ‘%’, ‘+’, یا ‘-’ باشد، همانطور که در بخش Jobs شرح داده شده است. سیگنالها یا با شماره یا با نام (همانطور که در /usr/include/signal.h بدون پیشوند ‘SIG’ آمده است) تعیین میشوند.هیچ job پیشفرضی وجود ندارد؛ تنها وارد کردن
سیگنالی به کار فعلی ارسال نمیکند. اگر سیگنال ارسالی TERM (خاتمه) یا HUP (قطع تماس) باشد، آنگاه به کار یا فرایند سیگنال CONT (ادامه) نیز ارسال میشود.kill
limit[-h] [resource [maximum-use]]- میزان مصرف
فرایند
فعلی و هر
فرایندی که
ایجاد
میکند را
به گونهای
محدود
میسازد که
به طور مجزا
از maximum-use بر
روی resource
مشخصشده
تجاوز نکند.
اگر هیچ maximum-use مشخص نشود، حد فعلی برای resource چاپ میشود.
اگر هیچ resource مشخص نشود، تمامی محدودیتها نمایش داده میشوند.
اگر فلگ
-hداده شود، محدودیتهای سخت (hard limits) به جای محدودیتهای فعلی استفاده میشوند. محدودیتهای سخت سقفی را برای مقادیر محدودیتهای فعلی تعیین میکنند. تنها کاربر ارشد (super-user) میتواند محدودیتهای سخت را افزایش دهد، اما هر کاربری میتواند محدودیتهای فعلی را در محدوده مجاز کاهش یا افزایش دهد.انواع resource قابل کنترل در حال حاضر شامل موارد زیر است (در صورت پشتیبانی توسط سیستمعامل):
- resource
- توضیحات منبع
concurrency- حداکثر تعداد ریسهها (threads) برای این فرایند.
coredumpsize- اندازه بزرگترین core dump که ایجاد خواهد شد.
cputime- حداکثر تعداد ثانیههای پردازنده (cpu-seconds) که توسط هر فرایند استفاده میشود.
datasize- حداکثر رشد ناحیه داده+پشته (data+stack) از طریق sbrk(2) فراتر از انتهای متن برنامه (program text).
descriptorsیاopenfiles- حداکثر تعداد فایلهای باز برای این فرایند.
filesize- بزرگترین اندازه یک فایل تکی که میتواند ایجاد شود.
heapsize- حداکثر میزان حافظهای که یک فرایند میتواند در هر فراخوانی سیستمی brk(2) تخصیص دهد.
kqueues- حداکثر تعداد kqueueهای تخصیصیافته برای این فرایند.
maxlocks- حداکثر تعداد قفلها برای این کاربر.
maxmessage- حداکثر تعداد بایتها در mqueueهای POSIX برای این کاربر.
maxnice- حداکثر اولویت nice که کاربر مجاز است آن را افزایش دهد، نگاشتشده از [19...-20] به [0...39] برای این کاربر.
maxproc- حداکثر تعداد فرایندهای همزمان برای این شناسه کاربری (user id).
maxrtprio- حداکثر اولویت بلادرنگ (realtime) برای این کاربر.
maxrttime- مهلت زمانی (timeout) برای وظایف RT برحسب میکروثانیه برای این کاربر.
maxsignal- حداکثر تعداد سیگنالهای در انتظار (pending) برای این کاربر.
maxthread- حداکثر تعداد ریسههای (فرایندهای سبکوزن) همزمان برای این شناسه کاربری.
memorylocked- حداکثر اندازهای که یک فرایند میتواند با استفاده از mlock(2) در حافظه قفل کند.
memoryuse- حداکثر میزان حافظه فیزیکی که ممکن است در یک زمان مشخص به یک فرایند تخصیص داده شده باشد.
posixlocks- حداکثر تعداد قفلهای مشورتی (advisory) استاندارد POSIX برای این کاربر.
pseudoterminals- حداکثر تعداد شبهپایانهها (pseudo-terminals) برای این کاربر.
sbsize- حداکثر اندازهٔ بافر سوکتِ استفادهشده برای این کاربر.
stacksize- حداکثر اندازهٔ ناحیهٔ پشته (stack) که بهطور خودکار گسترش مییابد.
swapsize- حداکثر میزان فضای swap رزروشده یا استفادهشده برای این کاربر.
threads- حداکثر تعداد threadها برای این فرآیند.
vmemoryuse- حداکثر میزان حافظهٔ مجازی که یک فرآیند میتواند در یک زمان مشخص به خود تخصیص دهد (فضای آدرسدهی).
maximum-use میتواند به صورت یک عدد (اعشاری یا صحیح) به همراه یک ضریب مقیاس مشخص شود. برای تمام محدودیتها بهجز
cputimeمقیاس پیشفرض ‘k’ یا ‘kilobytes’ (۱۰۲۴ بایت) است؛ همچنین ضریب مقیاس ‘m’ یا ‘megabytes’ (۱۰۴۸۵۷۶ بایت) یا ‘g’ یا ‘gigabytes’ (۱۰۷۳۷۴۱۸۲۴ بایت) نیز میتواند استفاده شود. برایcputimeمقیاس پیشفرض ‘seconds’ است، در حالی که ‘m’ برای دقیقه یا ‘h’ برای ساعت، یا زمانی به شکل ‘mm:ss’ شامل دقیقه و ثانیه نیز میتواند استفاده شود.اگر maximum-use برابر با ‘
unlimited’ باشد، محدودیت روی resource مشخصشده برداشته میشود (این معادل با دستور توکارunlimitاست).هم برای نامهای resource و هم برای ضریبهای مقیاس، پیشوندهای غیرمبهم از نامها کفایت میکند.
log(+)- متغیر شل
watchرا چاپ کرده و وضعیت هر کاربری را که درwatchمشخص شده و وارد سیستم است، بدون توجه به زمان آخرین ورود او گزارش میدهد. همچنین نگاه کنید بهwatchlog. login- شل ورود (login shell) را خاتمه داده و نمونهای از /bin/login را جایگزین آن میکند. این یکی از روشهای خروج از سیستم (log off) است که جهت سازگاری با sh(1) گنجانده شده است.
logout- یک شل ورود
را خاتمه
میدهد.
بهویژه
زمانی که
ignoreeofتنظیم شده باشد بسیار کاربردی است. ls-F[-switch ...] [file ...] (+)- فایلها را
مشابه
اما بسیار سریعتر فهرست میکند.
ls -Fدستور
ls-Fهر نوع فایل خاص را در فهرست با یک پسوند کاراکتر ویژه مشخص میکند:- پسوند
- نوع فایل خاص
/- دایرکتوری.
*- قابل اجرا (Executable).
#- دستگاه بلوکی (Block device).
%- دستگاه نویسهای (Character device).
|- پایپ نامگذاریشده (فقط در سیستمهای دارای پایپ نامگذاریشده).
=- سوکت (فقط در سیستمهای دارای سوکت).
@- پیوند نمادین (فقط در سیستمهای دارای پیوند نمادین).
+- دایرکتوری مخفی (فقط AIX) یا وابسته به زمینه (فقط HP/UX).
:- ویژه شبکه (فقط HP/UX).
اگر متغیر پوستهٔ
listlinksتنظیم شده باشد، پیوندهای نمادین با جزئیات بیشتری مشخص میشوند (البته تنها در سیستمهایی که از آنها پشتیبانی میکنند):همچنین
listlinksسرعتls-Fرا کاهش میدهد و باعث میشود پارتیشنهای حاوی فایلهایی که پیوندهای نمادین به آنها اشاره دارند مونت شوند.اگر متغیر پوستهٔ
listflagsروی ‘x ،’ ‘a ،’ یا ‘A ،’ یا هر ترکیبی از آنها (برای نمونه، ‘xA’) تنظیم شده باشد، از آنها به عنوان گزینههایی برایls-Fاستفاده میشود و باعث میشود مانند موارد زیر عمل کند:ls -xF ls -Fa ls -FA
یا ترکیبی از آنها، به عنوان مثال
ls -FxAروی سیستمهایی که در آنها
پیشفرض نیست،ls -Cls-Fمانندعمل میکند مگر اینکهls -CFlistflagsشامل یک ‘x’ باشد، که در این حالت مانندرفتار میکند.ls -xFدستور
ls-Fاگر هرگونه سوییچی به آن داده شود، آرگومانهای خود را به ls(1) ارسال میکند، بنابراینبه طور کلی عملکرد درستی ارائه میدهد.alias ls ls-Fدستور توکار
ls-Fمیتواند فایلها را بسته به نوع یا پسوند فایل با رنگهای متفاوتی فهرست کند. متغیر شلcolorو متغیرهای محیطیCLICOLOR_FORCE ،LSCOLORSوLS_COLORSرا ببینید.
migrate[-site] pid|%jobid ... (+)migrate-site (+)- شکل اول،
فرایند یا
جاب را به
سایت
مشخصشده
یا سایت
پیشفرضی
که توسط
مسیر سیستم
تعیین شده
مهاجرت (migrate)
میدهد.
(فقط در TCF)
شکل دوم معادل با
است، به این صورت که فرایند جاری را به سایت مشخصشده منتقل میکند. مهاجرت دادن خود شل میتواند رفتارهای غیرمنتظرهای ایجاد کند، زیرا شل تمایلی به از دست دادن tty خود ندارد. (فقط در TCF)migrate -site$$
newgrp[-] [group] (+)- معادل با
مطابق با newgrp(1). تنها در صورتی در دسترس است که شل به این شکل کامپایل شده باشد؛ متغیر شل
exec newgrpversionرا ببینید. nice[+number] [command]- اولویت
زمانبندی
شل را به
اندازهٔ
number یا
بدون number
به اندازهٔ
۴ واحد
افزایش
میدهد.
همراه با
command ،
دستور command
را با
اولویت
مناسب اجرا
میکند.
هرچه number
بزرگتر
باشد،
پردازه cpu
کمتری
دریافت
میکند.
کاربر ارشد
(super-user)
میتواند
با استفاده
از
اولویت را کاهش دهد.
nice -number...command همواره در یک زیرشل (sub-shell) اجرا میشود، و محدودیتهای اعمالشده بر دستورها در عبارات سادهٔ
ifبر آن نیز اعمال میگردد. nohup[command]- همراه با
command ،
دستور command
را به
گونهای
اجرا
میکند که
سیگنالهای
قطع ارتباط
(hangup) را نادیده
بگیرد. توجه
داشته
باشید که
ممکن است
دستورها
پاسخ خود را
به hangup تنظیم
کنند و
nohupرا نادیده بگیرند.بدون آرگومان، تنها باعث میشود که شل غیرتعاملی تا پایان اسکریپت، سیگنالهای قطع ارتباط را نادیده بگیرد. همچنین بخش Signal handling و دستور توکار
hupرا ببینید. notify[%job ...]- باعث
میشود که
شل به محض
تغییر
وضعیت هر یک
از شغلهای
مشخصشده
(یا در صورت
عدم تعیین
%job ، شغل فعلی) بهصورت ناهمگام به کاربر اطلاع دهد، به جای اینکه طبق روال معمول تا خط اعلان بعدی منتظر بماند. job میتواند یک عدد، یک رشته، ‘’, ‘%’, ‘+’, یا ‘-’ باشد، همانطور که در بخش Jobs توضیح داده شده است. همچنین متغیر شلnotifyرا ببینید. onintr[-|label]- عملکرد شل
در هنگام
وقفهها (interrupts)
را کنترل
میکند.
بدون
آرگومان،
عملکرد
پیشفرض شل
در برابر
وقفهها را
بازیابی
میکند، که
همانا
خاتمه دادن
به
اسکریپتهای
شل یا
بازگشت به
سطح ورودی
دستور
ترمینال
است.
به همراه ‘
- ،’ باعث میشود که تمام وقفهها نادیده گرفته شوند.به همراه label ، باعث میشود که شل هنگام دریافت یک وقفه یا خاتمه یافتن یک فرآیند فرزند به دلیل وقفه، یک دستور
را اجرا کند.goto labelاگر شل بهصورت جداشده (detached) اجرا شده باشد و همچنین در فایلهای راهاندازی سیستم (به FILES مراجعه کنید) که در هر صورت وقفهها در آنها غیرفعال هستند،
onintrنادیده گرفته میشود. popd[-p] [-l] [-n|-v] [+n]- بدون
آرگومان،
پشتهٔ
دایرکتوری
را خارج (pop)
کرده و به
دایرکتوری
بالای جدید
بازمیگردد.
با یک عدد ‘
+n’, مورد nاُم را در پشته دور میاندازد.در نهایت، همهٔ حالتهای
popdپشتهٔ دایرکتوری نهایی را چاپ میکنند، درست مانندdirs. متغیر پوستهٔpushdsilentرا میتوان برای جلوگیری از این کار تنظیم کرد و فلگ-pرا میتوان برای نادیدهگرفتنpushdsilentبه کار برد. فلگهای-l,-nو-vاثری مشابه بر رویpopdدارند همانطور که برdirsدارند. (+) printenv[name] (+)- نامها و مقادیر تمام متغیرهای محیطی را چاپ میکند، یا با name, مقدار متغیر محیطی name را چاپ میکند.
pushd[-p] [-l] [-n|-v] [name|+n]- بدون
آرگومان،
دو عنصر
بالای
پشتهٔ
دایرکتوری
را جابهجا
میکند. اگر
pushdtohomeتنظیم شده باشد،pushdبدون آرگومان همانندمانندpushd ~cdعمل میکند. (+)با name ، دایرکتوری کاری فعلی را به پشتهٔ دایرکتوری اضافه کرده (push) و به name تغییر مکان میدهد. اگر name برابر با ‘
-’ باشد، به عنوان دایرکتوری کاری قبلی تفسیر میشود (بخش Filename substitution را ببینید). (+) اگرduniqueتنظیم شده باشد،pushdپیش از اضافه کردن name به پشته، هر نمونه از آن را از پشته حذف میکند. (+)با یک شمارهٔ ‘
+n ،’ عنصر nـُمِ پشتهٔ دایرکتوری را میچرخاند تا به عنصر بالا (top) تبدیل شود و به آن تغییر مکان میدهد. با این حال، اگرdextractتنظیم شده باشد،دایرکتوری nـُم را استخراج کرده، آن را به بالای پشته اضافه میکند و به آن تغییر مکان میدهد. (+)pushd +nدر نهایت، تمام اشکال
pushdپشتهٔ نهایی دایرکتوری را درست مانندdirsچاپ میکنند. متغیر شلpushdsilentرا میتوان برای جلوگیری از این کار تنظیم کرد و فلگ-pرا میتوان برای لغو اثرpushdsilentمشخص نمود. فلگهای-l-،-nو-vاثری مشابه بر رویpushdدارند همانطور که بر رویdirsدارند. (+) rehash- باعث
محاسبهٔ
مجدد جدول
درهمسازی
(hash table) داخلی
محتویات
دایرکتوریهای
موجود در
متغیر
pathمیشود. در صورتی که متغیر شلautorehashتنظیم نشده باشد و هنگام ورود به سیستم، دستورهای جدیدی به دایرکتوریهایpathاضافه شوند، به این دستور نیاز خواهد بود. با فعال بودنautorehash ،دستورهای جدید بهطور خودکار پیدا میشوند، به جز در حالت خاصی که دستوری با همان نام در دایرکتوری دیگری از قبل در جدول درهمسازی وجود داشته باشد. همچنین کش دایرکتوریهای خانگی ساختهشده توسط بسط تیلدا (tilde expansion) را پاکسازی میکند. repeatcount command- دستور command
مشخصشده،
که مشمول
همان
محدودیتهای
command در
عبارت
تکخطی
ifدر بالا است، به تعداد count بار اجرا میشود. تغییر مسیرهای I/O دقیقاً یک بار اتفاق میافتند، حتی اگر count برابر با 0 باشد. rootnode//nodename (+)- گره ریشه (rootnode)
را به
//nodename
تغییر
میدهد،
بهطوری که
‘
/’ بهصورت ‘//nodename’ تفسیر خواهد شد. (فقط در Domain/OS)
sched(+)sched[+]hh:mm command (+)sched-n (+)- شکل اول
فهرست
رویدادهای
زمانبندیشده
را چاپ
میکند.
متغیر شل
schedرا میتوان برای تعیین قالبی که فهرست رویدادهای زمانبندیشده بر اساس آن چاپ میشود، مقداردهی کرد.شکل دوم command را به فهرست رویدادهای زمانبندیشده اضافه میکند. برای نمونه،
> sched 11:00 echo It\'s eleven o\'clock.
باعث میشود که شل عبارت
را در ساعت ۱۱ صبح چاپ کند.It's eleven o'clock.زمان میتواند در قالب ۱۲ ساعته AM/PM باشد:
> sched 5pm set prompt='[%h] It\'s after 5; go home: >'
یا میتواند نسبت به زمان فعلی تعیین شود:
> sched +2:15 /usr/lib/uucp/uucico -r1 -sother
مشخصکردن زمان به صورت نسبی نمیتواند از قالب AM/PM استفاده کند.
شکل سوم مورد شماره n را از فهرست رویدادها حذف میکند:
> sched 1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother 2 Wed Apr 4 17:00 set prompt=[%h] It's after 5; go home: > > sched -2 > sched 1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother
دستوری که در فهرست رویدادهای زمانبندیشده قرار دارد، درست پیش از چاپ اولین اعلان (prompt) پس از فرا رسیدن زمان زمانبندیشده اجرا میشود. ممکن است زمان دقیق اجرای دستور از دست برود، اما دستوری که موعد آن گذشته باشد در اولین اعلان بعدی اجرا خواهد شد. دستوری که موعد آن در زمان انتظار شل برای ورودی کاربر فرا برسد، بلافاصله اجرا میشود. با این حال، اجرای عادی فرمانی که در حال اجراست برای اجرای عنصری از فهرست رویدادهای زمانبندیشده متوقف نخواهد شد.
این سازوکار مشابه، اما نه کاملاً یکسان با دستور at(1) در برخی سیستمهای یونیکس است. بزرگترین عیب آن این است که ممکن است دستور را دقیقاً در زمان مشخصشده اجرا نکند. بزرگترین مزیت آن این است که از آنجا که
schedمستقیماً از درون پوسته اجرا میشود، به متغیرهای پوسته و سایر ساختارها دسترسی دارد. این موضوع سازوکاری را برای تغییر محیط کاری کاربر بر اساس ساعت روز فراهم میکند. setsetname ...setname=word ...set[-r] [-f|-l] name=(wordlist)... (+)setname[index]=word ...set-r(+)set-rname ... (+)set-rname=word ... (+)- شکل اول
دستور
مقدار تمام
متغیرهای
پوسته را
چاپ میکند.
متغیرهایی
که حاوی بیش
از یک کلمه
باشند، به
صورت یک
فهرست
کلمات در
داخل
پرانتز چاپ
میشوند.
شکل دوم name را روی یک رشتهی تهی تنظیم میکند.
شکل سوم name را روی یک تککلمهی word تنظیم میکند.
شکل چهارم name را روی فهرست کلمات موجود در wordlist تنظیم میکند.
در تمام موارد، مقدار با گسترش دستور و نامفایل جایگزین میشود. اگر
-rمشخص شده باشد، مقدار به صورت فقطخواندنی تنظیم میشود. اگر-fیا-lمشخص شده باشند، فقط کلمات یکتا با حفظ ترتیب آنها تنظیم میشوند.-fاولین رخداد یک کلمه را ترجیح میدهد و-lآخرین رخداد را.شکل پنجم مؤلفهٔ indexام name را به word تنظیم میکند؛ این مؤلفه باید از پیش وجود داشته باشد.
شکل ششم تنها نام تمام متغیرهای شل را که فقطخواندنی هستند فهرست میکند.
شکل هفتم name را صرفنظر از اینکه مقداری دارد یا خیر، فقطخواندنی میکند.
شکل هشتم همانند شکل سوم است، اما همزمان name را فقطخواندنی نیز میکند.
این آرگومانها را میتوان برای مقداردهی و/یا فقطخواندنی کردن چندین متغیر در یک دستور set منفرد تکرار کرد. با این حال، توجه داشته باشید که بسط متغیرها پیش از انجام هرگونه تنظیم برای تمام آرگومانها رخ میدهد. همچنین دقت کنید که ‘
=’ میتواند به هر دو مورد name و word بچسبد یا با فاصله از هر دوی آنها جدا شود، اما نمیتواند تنها به یکی از آنها بچسبد. همچنین دستور توکارunsetرا ببینید.
setenv[name [value]]- بدون
آرگومان،
نام و مقدار
تمام
متغیرهای
محیطی را
چاپ میکند.
به همراه name ، متغیر محیطی name را به value یا در صورت عدم وجود value ، به یک رشتهٔ تهی (null) تنظیم میکند.
setpathpath (+)- معادل با setpath(1). (فقط در Mach)
setspathLOCAL|site|cpu ... (+)- مسیر اجرای سیستم را تنظیم میکند. (فقط در TCF)
settccap value (+)- به شل اعلام
میکند که
قابلیت
ترمینالِ
cap
(همانطور
که در
termcap(5)
تعریف شده)
دارای
مقدار value
است. هیچ
بررسی
اعتبارسنجیای
(sanity check) انجام
نمیشود.
کاربران
ترمینال Concept
ممکن است
نیاز داشته
باشند از
استفاده کنند تا شکستن خطوط (wrapping) در راستترین ستون به درستی انجام گیرد.
settc xn no setty[-d|-q|-x] [-a] [[+|-]mode] (+)- کنترل
میکند که
شل اجازه
تغییر کدام
حالتهای tty
(رجوع کنید
به
مدیریت
ترمینال (+))
را نمیدهد.
گزینههای
-d-،-qیا-xبهsettyمیگویند که به ترتیب بر روی مجموعهحالتهای tty مربوط به ‘edit ،’ ‘quote’ یا ‘execute’ عمل کند؛ بدون-d-،-qیا-x-،مجموعه ‘execute’ استفاده میشود.بدون آرگومانهای دیگر،
settyحالتهایی از مجموعهی انتخابشده را که به صورت روشن (‘+mode’) یا خاموش (‘-mode’) ثابت شدهاند، فهرست میکند. حالتهای موجود، و در نتیجه نحوه نمایش، از سیستمی به سیستم دیگر متفاوت است. با-a-،همه حالتهای tty را در مجموعهی انتخابشده، صرفنظر از اینکه ثابت شدهاند یا خیر، فهرست میکند. با+mode ،-mode یا mode ، حالت mode را در مجموعهی انتخابشده به صورت روشن یا خاموش ثابت میکند، یا کنترل را از mode برمیدارد. برای نمونه،حالت ‘setty +echok echoeechok’ را روشن نگه میدارد و به دستورات اجازه میدهد تا حالت ‘echoe’ را روشن یا خاموش کنند، هر دو در زمانی که پوسته در حال اجرای دستورات است. setxvers[string] (+)- پیشوند نسخه آزمایشی را روی string تنظیم میکند، یا در صورت حذف string آن را پاک میکند. (فقط در TCF)
shift[variable]- بدون
آرگومان،
argv[1] را دور میاندازد و اعضایargvرا به سمت چپ شیفت میدهد. تنظیم نشدنargvیا داشتن مقداری با کمتر از یک کلمه، یک خطا محسوب میشود.همراه با variable ، همان عملکرد را روی variable انجام میدهد.
source[-h] name [args ...]- شِل
دستورها را
از name
خوانده و
اجرا
میکند. این
دستورها در
فهرست
تاریخچه
قرار
نمیگیرند.
اگر هرگونه
args داده
شود، در
argvقرار میگیرند. (+) دستورهایsourceمیتوانند تو در تو باشند؛ اگر بیش از حد عمیق تو در تو شوند، ممکن است توصیفکنندههای فایل شِل تمام شوند. بروز خطا در یکsourceدر هر سطحی، تمام دستورهایsourceتو در تو را متوقف میکند.همراه با
-h-،دستورها به جای اجرا شدن در فهرست تاریخچه قرار میگیرند، بسیار شبیه بهhistory -L stop %job|pid ...- کارهای یا
فرآیندهای
مشخصشدهای
را که در
پسزمینه
در حال اجرا
هستند
متوقف
میکند.
job
میتواند
یک عدد، یک
رشته،
‘
’, ‘%’, ‘+’ یا ‘-’ باشد، همانطور که در بخش Jobs شرح داده شده است.هیچ job پیشفرضی وجود ندارد؛ تنها وارد کردن
کار جاری را متوقف نمیکند.stop suspend- باعث متوقف
شدن پوسته
در جای خود
میشود،
درست مانند
زمانی که
سیگنال
توقف با
^Zبرای آن ارسال شده باشد. این دستور بیشتر برای متوقف کردن پوستههایی به کار میرود که توسط su(1) شروع شدهاند.
switch(string)casestr1:...breaksw...default:...breakswendsw- هر برچسب case
بهطور
متوالی با
string
مشخصشده
مطابقت
داده
میشود؛
این رشته
ابتدا
دستخوش بسط
دستور و نام
فایل قرار
میگیرد. از
نویسههای
کنترلیِ
فایل (metacharacters)
شامل ‘
* ،’ ‘?’ و ‘[...]’ میتوان در برچسبهای case استفاده کرد که این برچسبها دستخوش بسط متغیر میشوند. اگر پیش از رسیدن به برچسبdefaultهیچیک از برچسبها مطابقت نداشته باشند، اجرا از پس از برچسبdefaultآغاز میشود. هر برچسب case و برچسبdefaultباید در ابتدای یک خط قرار گیرند. دستورbreakswباعث ادامهٔ اجرا پس ازendswمیشود. در غیر این صورت، روند اجرای دستورات ممکن است مانند زبان C از میان برچسبهای case و برچسبهای default عبور کند (fall through). اگر هیچ برچسبی مطابقت نداشته باشد و بخش default نیز وجود نداشته باشد، اجرا پس ازendswادامه مییابد.
telltc(+)- مقادیر تمام قابلیتهای ترمینال را فهرست میکند (نگاه کنید به termcap(5)).
termname[termtype] (+)- بررسی
میکند که
آیا termtype (یا
مقدار فعلی
TERMاگر هیچ termtype مشخص نشده باشد) مدخلی در پایگاهداده termcap(5) یا terminfo(5) میزبان دارد یا خیر. در صورت وجود مدخل، نوع ترمینال را در خروجی استاندارد چاپ کرده و مقدار 0 را برمیگرداند؛ در غیر این صورت 1 را برمیگرداند. time[command]- دستور command
(که باید یک
دستور ساده
باشد، نه یک
alias، یک خط
لوله، یک
لیست دستور
یا یک لیست
دستور
پرانتزگذاریشده)
را اجرا
کرده و
خلاصهای
از زمان را
مطابق آنچه
ذیل متغیر
timeتوصیف شده، چاپ میکند. در صورت لزوم، یک شل اضافی برای چاپ آمار زمانی پس از تکمیل دستور ایجاد میشود.بدون command ، خلاصهای از زمان را برای شل فعلی و فرزندان آن چاپ میکند.
umask[value]- ماسک ایجاد
فایل را روی
value که در
مبنای هشت
(اکتال)
داده
میشود،
تنظیم
میکند.
مقادیر
متداول
برای این
ماسک
عبارتند از
002، که تمام
دسترسیها
را به گروه
و دسترسی
خواندن و
اجرا را به
دیگران
میدهد، و
022، که
دسترسی
خواندن و
اجرا را به
گروه و
دیگران
میدهد.
بدون value ، ماسک فعلی ایجاد فایل را چاپ میکند.
unaliaspattern- تمام
نامهای
مستعاری (aliases)
را که نام
آنها با
pattern
مطابقت
دارد، حذف
میکند.
بنابراین
تمام aliasها را حذف میکند. اگر هیچ موردی برای
unalias *unaliasشدن وجود نداشته باشد، خطا محسوب نمیشود. uncompletepattern (+)- تمام
تکمیلهایی
را که نام
آنها با
pattern مطابق
باشد حذف
میکند.
بنابراین
تمام تکمیلها را حذف میکند. اگر هیچ موردی برای
uncomplete *uncompleteشدن وجود نداشته باشد، خطا محسوب نمیشود. unhash- استفاده از جدول درهمسازی (hash table) داخلی را برای افزایش سرعت در پیدا کردن محل برنامههای اجرا شده غیرفعال میکند.
universeuniverse (+)- محیط universe را روی universe تنظیم میکند. (فقط در Masscomp/RTU)
unlimit[-hf] [resource]- محدودیت
اعمالشده
بر روی resource
یا در صورت
مشخص نشدن
resource ، تمام
محدودیتهای
resource را حذف
میکند.
با گزینهٔ
-h-،محدودیتهای سخت (hard limits) متناظر حذف میشوند. تنها کاربر ارشد (super-user) اجازهٔ انجام این کار را دارد.توجه داشته باشید که ممکن است
unlimitبا موفقیت به پایان نرسد، زیرا اکثر سیستمها اجازه نمیدهند کهdescriptorsنامحدود باشند.با گزینهٔ
-fاز خطاها چشمپوشی میشود. unsetpattern- تمام
متغیرهایی
را که نام
آنها با
pattern مطابق
باشد حذف
میکند،
مگر اینکه
فقطخواندنی
(read-only) باشند.
بنابراین
تمام متغیرها را به جز موارد فقطخواندنی حذف میکند؛ این کار ایدهٔ بدی است.
unset *اینکه چیزی برای
unsetشدن وجود نداشته باشد، خطا محسوب نمیشود. unsetenvpattern- تمام
متغیرهای
محیطی را که
نام آنها
با pattern
تطابق دارد
حذف میکند.
بنابراین
تمام متغیرهای محیطی را حذف میکند؛ این کار ایدهٔ بدی است.
unsetenv *اینکه چیزی با
unsetenvحذف نشود، خطا محسوب نمیشود. ver[systype [command]] (+)- بدون
آرگومان،
مقدار
SYSTYPEرا چاپ میکند.همراه با systype, مقدار
SYSTYPEرا روی systype تنظیم میکند.همراه با systype و command, دستور command را تحت systype اجرا میکند. systype میتواند ‘
bsd4.3’ یا ‘sys5.3’ باشد.(فقط در Domain/OS)
wait- پوسته منتظر تمام کارهای پسزمینه میماند. اگر پوسته تعاملی باشد، یک وقفه انتظار را مختل کرده و باعث میشود پوسته نامها و شماره کارهای تمام کارهای باقیمانده را چاپ کند.
warpuniverse (+)- جهان (universe) را به universe تنظیم میکند. (فقط در Convex/OS)
watchlog(+)- نامی
جایگزین
برای دستور
داخلی
log. تنها در صورتی در دسترس است که پوسته بدین صورت کامپایل شده باشد؛ متغیر پوستهٔversionرا ببینید. wherecommand (+)- تمامی
موارد
شناختهشده
از command را
گزارش
میدهد،
شامل
نامهای
مستعار (aliases)،
دستورهای
داخلی و
فایلهای
اجرایی در
path. whichcommand (+)- دستوری را
نمایش
میدهد که
پس از اعمال
جایگزینیها،
جستجوی
pathو غیره توسط پوسته اجرا خواهد شد. این دستور داخلی درست مانند which(1) است، اما نامهای مستعار و دستورهای داخلیtcshرا بهدرستی گزارش میکند و ۱۰ تا ۱۰۰ برابر سریعتر است. همچنین دستور ویرایشگرwhich-commandرا ببینید.
while(expr)...end- دستورهای
بین
whileوendمتناظر با آن را تا زمانی که expr (یک عبارت، همانطور که در بخش Expressions توصیف شده) مقداری غیر صفر ارزیابی شود، اجرا میکند.whileوendباید بهتنهایی در خطوط ورودی خود ظاهر شوند.breakوcontinueممکن است برای پایان دادن یا ادامه دادن زودهنگام حلقه استفاده شوند. اگر ورودی یک ترمینال باشد، در نخستین بار اجرای حلقه مانندforeachاز کاربر ورودی درخواست میشود.
نامهای مستعار ویژه (+)
در صورت تنظیم، هر یک از این نامهای مستعار بهطور خودکار در زمان مشخصشده اجرا میشوند. همگی آنها در ابتدا تعریفنشده هستند.
نامهای مستعار ویژهٔ پشتیبانیشده عبارتند از:
beepcmd- زمانی اجرا میشود که پوسته بخواهد زنگ ترمینال را به صدا درآورد.
cwdcmd- پس از هر
بار تغییر
دایرکتوری
کاری اجرا
میشود.
برای مثال،
اگر کاربر
در یک
سامانه
پنجره X با
استفاده از
xterm(1) و
یک مدیر
پنجره
بازوالدینساز
که از نوار
عنوان
پشتیبانی
میکند،
مانند
twm(1) کار
کند و دستور
زیر را اجرا
کند:
> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd ^G"'آنگاه پوسته عنوان xterm(1) در حال اجرا را به نام میزبان، یک ‘
:’ و دایرکتوری کاری جاری کامل تغییر میدهد. روشی حرفهایتر برای انجام این کار بدین صورت است:> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'این کار نام میزبان و دایرکتوری کاری را در نوار عنوان قرار میدهد، اما تنها نام میزبان را در منوی مدیریت آیکونها درج میکند.
توجه داشته باشید که قرار دادن یک
cd ،pushdیاpopdدرونcwdcmdممکن است باعث ایجاد یک حلقه بینهایت شود. به عقیده نویسنده، هر کس چنین کاری کند به آنچه مستحق آن است خواهد رسید. jobcmd- پیش از
اجرای هر
دستور، یا
هنگامی که
دستور
تغییر
وضعیت
میدهد،
اجرا
میشود. این
مشابه
postcmdاست، اما دستورهای داخلی را چاپ نمیکند.> alias jobcmd 'echo -n "^[]2\;\!#:q^G"'
سپس اجرای
رشته دستور را در نوار عنوان xterm قرار میدهد.vi foo.c helpcommand- توسط دستور
ویرایشگر
run-helpفراخوانی میشود. نام دستوری که برای آن درخواست راهنما شده است، بهعنوان تنها آرگومان ارسال میگردد. بهعنوان مثال، اگر فردی چنین کند:> alias helpcommand '\!:1 --help'
آنگاه با استفاده از قرارداد فراخوانی راهنمای GNU، نمایش راهنمای خود دستور فراخوانی خواهد شد.
در حال حاضر راه سادهای برای پشتیبانی از قراردادهای مختلف فراخوانی وجود ندارد (مانند ‘
-h’ مرسوم در Unix)، مگر با استفاده از جدولی متشکل از دستورهای بسیار. periodic- هر
tperiodدقیقه یکبار اجرا میشود. این سازوکار، روشی مناسب برای بررسی تغییرات رایج اما کمتکرار مانند ایمیلهای جدید فراهم میآورد. برای نمونه، اگر شخصی چنین کند:> set tperiod = 30 > alias periodic checknews
آنگاه برنامه checknews(1) هر ۳۰ دقیقه یکبار اجرا خواهد شد.
اگر
periodicتنظیم شده باشد اماtperiodتنظیم نشده یا مقدار آن 0 باشد،periodicرفتاری مشابهprecmdخواهد داشت. precmd- درست پیش از
چاپ هر
اعلان (prompt)
اجرا
میشود. به
عنوان
مثال، اگر
کسی دستور
زیر را اجرا
کند:
> alias precmd date
آنگاه date(1) درست پیش از اینکه شل برای هر دستور اعلان را نمایش دهد، اجرا میشود.
هیچ محدودیتی در مورد آنچه
precmdمیتواند برای انجام آن تنظیم شود وجود ندارد، اما باید احتیاط به خرج داد. postcmd- پیش از
اجرای هر
دستور اجرا
میشود.
> alias postcmd 'echo -n "^[]2\;\!#:q^G"'
سپس اجرای
رشته دستور را در نوار عنوان xterm قرار میدهد.vi foo.c shell- مفسر را
برای
اسکریپتهای
اجرایی که
خودشان
مفسری را
مشخص
نکردهاند
تعیین
میکند.
کلمه اول
باید یک
مسیر کامل
به مفسر
مورد نظر
باشد (مانند
‘
/bin/csh’ یا ‘/usr/local/bin/tcsh’).
متغیرهای ویژه شل
متغیرهایی که در این بخش شرح داده شدهاند، معنای خاصی برای شل دارند.
شل
متغیرهای
addsuffix ، argv
، autologout ،
csubstnonl ، command
، echo_style ،
edit ، gid ،
group ، home ،
loginsh ، oid
، path ،
prompt ، prompt2
، prompt3 ،
shell ، shlvl
، tcsh ، term
، tty ، uid
، user و
version را در
هنگام
راهاندازی
مقداردهی
میکند؛
این
متغیرها پس
از آن تغییر
نمیکنند
مگر آنکه
توسط کاربر
تغییر داده
شوند. شل
متغیرهای
cwd ، dirstack
، owd و
status را در
صورت لزوم
بهروزرسانی
کرده، و
متغیر logout
را هنگام
خروج از شل (logout)
تنظیم
میکند.
شل
متغیرهای
group ، home ،
path ، shlvl ،
term و user
را با
متغیرهای
محیطی با
همین
نامها
همگامسازی
میکند: هر
بار که
متغیر
محیطی
تغییر کند،
شل متغیر
متناظر آن
در شل را نیز
متناسب با
آن تغییر
میدهد (مگر
اینکه
متغیر شل
فقط-خواندنی
باشد) و
بالعکس.
توجه داشته
باشید
اگرچه cwd
و PWD
معنای
یکسانی
دارند، به
این شیوه
همگامسازی
نمیشوند،
و این که شل
بهطور
خودکار
فرمتهای
متفاوت
path و PATH
را به
یکدیگر
تبدیل
میکند.
متغیرهای ویژه و پشتیبانیشدهٔ شل عبارتند از:
addsuffix(+)- در صورت
تنظیم
بودن،
تکمیل نام
فایل هنگام
تطابق
دقیق، یک
‘
/’ به انتهای دایرکتوریها و یک فاصله (space) به انتهای فایلهای معمولی اضافه میکند. به طور پیشفرض تنظیم است. afsuser(+)- در صورت
تنظیم
بودن،
قابلیت قفل
خودکار
autologoutبهجای نام کاربری محلی، از مقدار این متغیر برای احراز هویت kerberos استفاده میکند. ampm(+)- در صورت تنظیم بودن، تمام زمانها در قالب ۱۲ ساعتهٔ AM/PM نمایش داده میشوند.
anyerror(+)- این متغیر
تعیین
میکند که
چه مقداری
به متغیر
statusمنتقل شود. برای اطلاعات بیشتر به توضیحات متغیرstatusدر ادامه مراجعه کنید. argv- آرگومانهای
ارائهشده
به شل.
پارامترهای
موضعی از
argvگرفته میشوند؛ یعنی ‘$1’ با ‘$argv[1]’ جایگزین میشود، و غیره. به طور پیشفرض تنظیم میشود، اما معمولاً در شلهای تعاملی خالی است. autocorrect(+)- در صورت
تنظیم
بودن،
دستور
ویرایشگر
spell-wordپیش از هر بار تلاش برای تکمیل خودکار، به طور خودکار فراخوانی میشود. autoexpand(+)- در صورت
تنظیم
بودن،
دستور
ویرایشگر
expand-historyپیش از هر بار تلاش برای تکمیل خودکار، به طور خودکار فراخوانی میشود.اگر این مقدار برابر با ‘
onlyhistory’ تنظیم شود، آنگاه تنها تاریخچه بسط داده خواهد شد و تکمیل مجدد، نام فایلها را بسط میدهد. autolist(+)- در صورت
تنظیم،
گزینههای
محتمل پس از
یک تکمیل
مبهم فهرست
میشوند.
اگر برابر با ‘
ambiguous’ تنظیم شود، گزینههای محتمل تنها زمانی فهرست میشوند که هیچ نویسه جدیدی با تکمیل افزوده نشود. autologout(+)- کلمه اول،
تعداد
دقایق عدم
فعالیت قبل
از خروج
خودکار از
سیستم است.
کلمه
اختیاری
دوم، تعداد
دقایق عدم
فعالیت قبل
از قفل شدن
خودکار است.
هنگامی که
پوسته
بهطور
خودکار
خارج
میشود،
عبارت
را چاپ کرده، متغیر
auto-logoutlogoutرا به ‘automatic’ تنظیم میکند و خارج میشود. هنگامی که پوسته بهطور خودکار قفل میشود، کاربر برای ادامه کار ملزم به وارد کردن رمز عبور خود خواهد بود. پنج بار تلاش ناموفق منجر به خروج خودکار از سیستم میشود.بهطور پیشفرض در پوستههای ورود و مدیر سیستم (کاربر ارشد) به ‘
60’ (خروج خودکار پس از ۶۰ دقیقه، و بدون قفل شدن) تنظیم شده است، اما نه در حالتی که پوسته تشخیص دهد تحت یک سامانه پنجرهای اجرا میشود (یعنی متغیر محیطیDISPLAYتنظیم شده باشد)، یا tty یک pseudo-tty (pty) باشد یا پوسته به این شکل کامپایل نشده باشد (متغیر پوستهversionرا ببینید).برای غیرفعال کردن خروج خودکار، متغیر
autologoutرا لغو تنظیم (unset) کرده یا آن را برابر با ‘0’ قرار دهید. همچنین متغیرهای پوستهafsuserوlogoutرا نیز ببینید. autorehash(+)- در صورت
تنظیم، اگر
دستوری در
جدول
درهمسازی
(هش) پیدا
نشود، جدول
هش داخلی
محتویات
دایرکتوریهای
موجود در
متغیر
pathمجدداً محاسبه خواهد شد. علاوه بر این، در صورت تنظیم به ترتیب روی ‘complete’ یا ‘correct’ فهرست دستورهای در دسترس برای هر تلاش جهت تکمیل دستور یا تصحیح املایی بازسازی میشود؛ اگر روی ‘always’ تنظیم شود، این کار برای هر دو مورد انجام خواهد شد. backslash_quote(+)- در صورت
تنظیم،
بکاسلشها
(`\') همیشه ‘
\ ،’ ‘'’ و ‘"’ را نقلقول (quote) میکنند. این امر ممکن است انجام کارهای پیچیده نقلقول را آسانتر کند، اما میتواند در اسکریپتهای csh(1) باعث خطاهای نحوی (syntax errors) شود. catalog- نام فایل
کاتالوگ
پیام. در
صورت
تنظیم،
tcshبه جای tcsh پیشفرض، از tcsh.${catalog} به عنوان کاتالوگ پیام استفاده میکند. cdpath- فهرستی از
دایرکتوریها
که در صورت
پیدا نشدن
زیردایرکتوریها
در
دایرکتوری
فعلی،
cdباید در آنها جستجو کند. cdtohome(+)- در صورت عدم
تنظیم،
cdبه name دایرکتوری نیاز دارد و اگر این آرگومان حذف شود، به دایرکتوریhomeنخواهد رفت. این متغیر به طور پیشفرض تنظیم شده است. color- در صورت
تنظیم،
نمایش رنگی
را برای
دستور
توکار
ls-Fفعال میکند و آرگومان--color=autoرا به ls(1) ارسال مینماید (یا--color=alwaysدر صورتی کهCLICOLOR_FORCEتنظیم شده باشد). همچنین میتوان آن را تنها روی ‘ls-F’ یا تنها روی ‘ls’ تنظیم کرد تا رنگها فقط برای یک دستور خاص فعال شوند. تنظیم آن بدون مقدار، معادل با تنظیم آن روی ‘(ls-F ls)’ است. اگر خروجی به یک ترمینال هدایت نشده باشد، رنگ غیرفعال میشود، مگر اینکهCLICOLOR_FORCEتنظیم شده باشد. colorcat- در صورت تنظیم، توالیهای فرار رنگی را برای فایلهای پیام NLS فعال میکند و پیامهای NLS را بهصورت رنگی نمایش میدهد.
command(+)- در صورت
تنظیم،
دستوری است
که با
گزینهٔ
-cبه شل ارسال شده است. compat_expr(+)- در صورت تنظیم، شل عبارتها را مانند csh(1) اصلی، از راست به چپ ارزیابی میکند.
complete(+)- اگر روی
‘
igncase’ تنظیم شود، تکمیل دستورها به بزرگ و کوچکی حروف غیرحساس میشود.اگر روی ‘
enhance’ تنظیم شود، تکمیل علاوه بر نادیده گرفتن بزرگی و کوچکی حروف، خط تیره و زیرخط را معادل یکدیگر در نظر میگیرد؛ همچنین با نقطه، خط تیره و زیرخط (‘. ،’ ‘-’ و ‘_’) بهعنوان جداکنندهٔ کلمات رفتار خواهد کرد.اگر روی ‘
Enhance’ تنظیم شود، تکمیل دستورها نویسههای بزرگ و خط تیره پایین (underscore) را بهصورت صریح مطابقت میدهد و نویسههای کوچک و خط تیره را بدون حساسیت به بزرگی و کوچکی حروف تطبیق میدهد؛ همچنین نقطهها، خط تیرهها و خطهای تیره پایین را بهعنوان جداکننده کلمات در نظر میگیرد. continue(+)- اگر روی فهرستی از دستورها تنظیم شود، شل به جای اجرای یک دستور جدید، دستورهای فهرستشده را ادامه خواهد داد.
continue_args(+)- مشابه continue
است، با این
تفاوت که شل
دستور زیر
را اجرا
میکند:
echo `pwd` $argv > ~/.<cmd>_pause; %<cmd>
correct(+)- اگر روی
‘
cmd’ تنظیم شود، املای دستورها بهطور خودکار تصحیح میشود.اگر روی ‘
complete’ تنظیم شود، دستورها بهطور خودکار تکمیل میشوند.اگر روی ‘
all’ تنظیم شود، تمام خط فرمان تصحیح میگردد. csubstnonl(+)- اگر تنظیم شود، نویسههای خط جدید (newlines) و بازگشت به ابتدای خط (carriage returns) در جایگزینی دستور با فاصله جایگزین میشوند. بهطور پیشفرض تنظیم شده است.
cwd- مسیر نام
کامل
دایرکتوری
فعلی.
همچنین
متغیرهای
شل
dirstackوowdرا ببینید. dextract(+)- اگر تنظیم
شود،
دایرکتوری nام را از پشته دایرکتوریها استخراج میکند، به جای اینکه آن را با چرخش به بالای پشته بیاورد.
pushd +n dirsfile(+)- مکان
پیشفرضی
که در آن
و
dirs -Sبهدنبال یک فایل تاریخچه میگردند. در صورت عدم تنظیم، ~/.cshdirs استفاده میشود. از آنجا که بهطور معمول تنها ~/.tcshrc پیش از ~/.cshdirs بارگذاری (source) میشود،dirs -Ldirsfileباید در ~/.tcshrc تنظیم شود و نه در ~/.login. dirstack(+)- آرایهای
از تمام
دایرکتوریهای
موجود در
پشتهٔ
دایرکتوری
(directory stack). ‘$dirstack[1]’
دایرکتوری
کاری فعلی
است، ‘$dirstack[2]’
اولین
دایرکتوری
روی پشته
است و الی
آخر. توجه
داشته
باشید که
دایرکتوری
کاری فعلی
‘$dirstack[1]’ است
اما در
جایگزینیهای
پشتهٔ
دایرکتوری
برابر با
‘
=0’ میباشد. میتوان پشته را بهطور دلخواه با تنظیمdirstackتغییر داد، اما عنصر اول (دایرکتوری کاری فعلی) همیشه درست باقی میماند. همچنین متغیرهای پوستهٔcwdوowdرا ببینید. dspmbyte(+)- تنها زمانی
تأثیر دارد
که ‘
dspm’ بهعنوان بخشی از متغیر پوستهٔversionفهرست شده باشد.اگر روی ‘
euc’ تنظیم شود، نمایش و ویرایش کدهای EUC-kanji (ژاپنی) را فعال میکند.اگر روی ‘
sjis’ تنظیم شود، نمایش و ویرایش کد Shift-JIS (ژاپنی) را فعال میکند.اگر روی ‘
big5’ تنظیم شود، نمایش و ویرایش کد Big5 (چینی) را فعال میکند.اگر روی ‘
utf8’ تنظیم شود، نمایش و ویرایش کد Utf8 (یونیکد) را فعال میکند.اگر دقیقاً روی ۲۵۶ نویسه در قالب زیر تنظیم شود، نمایش و ویرایش قالب اصلی کدهای چندبایتی (multi-byte) را فعال میکند:
> set dspmbyte = NNN...[250 characters]...NNNهر نویسه N در این مقدارِ ۲۵۶ نویسهای، (از چپ به راست) با کدهای اسکی 0x00, 0x01, 0x02, ..., 0xfd, 0xfe, 0xff در همان اندیس متناظر است. هر نویسه روی عدد ۰، ۱، ۲ یا ۳ تنظیم میشود که دارای این معانی هستند:
برای نمونه، اگر روی ۲۵۶ نویسه تنظیم شود که با ‘
001322’ آغاز میشوند، مقدار بدین صورت تفسیر میشود:Character ASCII Multi-byte character use 00x00 استفاده نمیشود. 00x01 استفاده نمیشود. 10x02 بایت اول. 30x03 بایت اول و بایت دوم. 20x04 بایت دوم. 20x05 بایت دوم. نسخه GNU coreutils از ls(1) نمیتواند نام فایلهای چندبایتی را بدون گزینه
-N(--literal) نمایش دهد. اگر از این نسخه استفاده میکنید، کلمه دوم dspmbyte را روی ‘ls’ تنظیم کنید. در غیر این صورت، برای مثال،نمیتواند نام فایلهای چندبایتی را نمایش دهد.ls-F -lتوجه داشته باشید که این متغیر تنها زمانی قابل استفاده است که KANJI و DSPMBYTE در زمان کامپایل تعریف شده باشند.
dunique(+)- در صورت
تنظیم،
pushdهر نمونه از name را پیش از قرار دادن آن در پشته، از پشته حذف میکند. echo- در صورت
تنظیم، هر
دستور به
همراه
آرگومانهایش
درست پیش از
اجرا
بازتاب (echo)
میشود.
برای
دستورهای
غیرداخلی
(non-builtin)، تمام
بسطها پیش
از بازتاب
رخ میدهند.
دستورهای
داخلی پیش
از
جایگزینی
دستور و نام
فایل
بازتاب
داده
میشوند،
زیرا این
جایگزینیها
سپس به صورت
گزینشی
انجام
میشوند.
توسط گزینه
خط فرمان
-xتنظیم میشود. echo_style(+)- سبک و شیوه
دستور
داخلی
echo. میتواند روی مقادیر زیر تنظیم شود:بهطور پیشفرض روی مقدار پیشفرض سیستم محلی تنظیم میشود. گزینههای BSD و System V در صفحات راهنمای echo(1) روی سیستمهای مربوطه توضیح داده شدهاند.
edit(+)- در صورت تنظیم، از ویرایشگر خط فرمان استفاده میشود. بهطور پیشفرض در پوستههای تعاملی تنظیم شده است.
editors(+)- فهرستی از
نام
دستورها
برای دستور
ویرایشگر
run-fg-editorجهت تطبیق. در صورت عدم تنظیم، متغیرهای محیطیEDITOR(‘ed’ در صورت عدم تنظیم) وVISUAL(‘vi’ در صورت عدم تنظیم) به جای آن استفاده خواهند شد. ellipsis(+)- در صورت
تنظیم،
توالیهای
خط اعلان
‘
%c ،’ ‘%.’ و ‘%C’ (متغیر پوستهٔpromptرا ببینید) دایرکتوریهای نادیدهگرفتهشده را به جای ‘/<skipped’ با یک علامت تعلیق یا سهنقطه (‘>...’) نشان میدهند. euid(+)- شناسه کاربر مؤثر (effective user ID) کاربر.
euser(+)- نخستین نام منطبق در مدخلهای passwd متناظر با شناسه کاربر مؤثر.
fignore(+)- پسوندهای نام فایلی را که باید در تکمیل خودکار (completion) نادیده گرفته شوند، فهرست میکند.
filec- در
،تکمیل خودکار همیشه استفاده میشود و این متغیر بهطور پیشفرض نادیده گرفته میشود.اگر
editتنظیم نشده باشد، روش سنتی تکمیل خودکار در csh(1) استفاده میشود.اگر در csh(1) تنظیم شود، تکمیل خودکار نام فایل به کار گرفته میشود.
gid(+)- شناسه گروه واقعی (real group ID) کاربر.
globdot(+)- در صورت
تنظیم،
الگوهای
عمومی
کاراکترهای
عام (wild-card glob) با
فایلها و
دایرکتوریهایی
که با
‘
.’ آغاز میشوند منطبق خواهند شد، به جز ‘.’ و ‘..’. globstar(+)- در صورت
تنظیم،
الگوهای
عمومی فایل
‘
**’ و ‘***’ با هر رشتهای از کاراکترها شامل ‘/’ منطبق شده و در تمام زیردایرکتوریهای موجود پیمایش میکنند. به عنوان مثال،تمام فایلهای .c را در درخت دایرکتوری فعلی فهرست میکند.ls **.cاگر به تنهایی استفاده شود، با صفر یا چند زیردایرکتوری تطابق مییابد. برای نمونه،
هر فایلی به نام ‘ls /usr/include/**/time.htime.h’ را در درخت دایرکتوری /usr/include فهرست میکند؛ در حالی کهبا هر فایلی در درخت دایرکتوری /usr/include که به ‘ls /usr/include/**time.htime.h’ ختم شود، تطابق خواهد داشت.برای جلوگیری از مشکلات ناشی از بازگشت (recursion)، الگوی انطباق ‘
**’ به درون پیوند نمادینی که به یک دایرکتوری اشاره دارد وارد نخواهد شد. برای نادیده گرفتن این مورد، از ‘***’ استفاده کنید. group(+)- نام گروه کاربر.
highlight- اگر تنظیم
شود، مورد
منطبق در
جستجوی
افزایشی (در
i-search-backوi-search-fwd) و ناحیه بین نشان (mark) و مکاننما به صورت تصویر وارون (reverse video) برجسته (highlight) میشوند.برجستهسازی نیازمند نوشتنهای مکرر در ترمینال است که بار اضافی (overhead) ایجاد میکند. اگر کارایی ترمینال برایتان اهمیت دارد، شاید بهتر باشد این گزینه را غیرفعال بگذارید.
histchars- یک مقدار
رشتهای که
نویسههای
مورد
استفاده در
History substitution
را تعیین
میکند.
نخستین نویسه از مقدار آن به عنوان نویسه جایگزینی تاریخچه استفاده میشود و جایگزین نویسه پیشفرض ‘
!’ میگردد.دومین نویسه از مقدار آن جایگزین نویسه ‘
^’ در جایگزینیهای سریع میشود. histdup(+)- مدیریت
ورودیهای
تکراری در
فهرست
تاریخچه را
کنترل
میکند.
اگر روی ‘
all’ تنظیم شود، تنها رخدادهای تاریخچه منحصربهفرد در فهرست تاریخچه وارد میشوند.اگر روی ‘
prev’ تنظیم شود و آخرین رخداد تاریخچه مشابه با دستور فعلی باشد، آنگاه دستور فعلی در تاریخچه وارد نمیشود.اگر روی ‘
erase’ تنظیم شود و همان رخداد در فهرست تاریخچه پیدا شود، آن رخداد قدیمی پاک شده و رخداد فعلی درج میشود.توجه داشته باشید که گزینههای ‘
prev’ و ‘all’ رویدادهای تاریخچه را دوباره شمارهگذاری میکنند تا هیچ فاصلهای وجود نداشته باشد. histfile(+)- مکان
پیشفرضی
که
و
history -Sدر آن به دنبال یک فایل تاریخچه میگردند.history -Lاگر تنظیم نشده باشد، از ~/.history استفاده میشود.
متغیر
histfileهنگام به اشتراک گذاشتن یک دایرکتوری خانگی یکسان بین ماشینهای مختلف، یا هنگام ذخیره تاریخچههای جداگانه در ترمینالهای مختلف مفید است. از آنجا که معمولاً تنها ~/.tcshrc پیش از ~/.history خوانده و اجرا میشود،histfileباید به جای ~/.login در ~/.tcshrc تنظیم شود. histlit(+)- در صورت
تنظیم شدن،
دستورات
توکار،
دستورات
ویرایشگر و
سازوکار
savehistاز شکل لفظی (گسترشنیافته) خطوط در فهرست تاریخچه استفاده میکنند. همچنین دستور ویرایشگرtoggle-literal-historyرا ببینید. history- کلمه اول
نشاندهنده
تعداد
رویدادهای
تاریخچه
برای
ذخیرهسازی
است.
کلمه اختیاری دوم (+) قالب چاپ تاریخچه را مشخص میکند؛ اگر تعیین نشود، از ‘
%h\t%T\t%R\n’ استفاده میشود. توالیهای قالب در بخش زیر تحتpromptتوضیح داده شدهاند؛ به معنای متغیر ‘%R’ توجه داشته باشید.بهطور پیشفرض روی ‘
100’ تنظیم شده است. home- با
دایرکتوری
خانگی
فراخواننده
مقداردهی
اولیه
میشود. بسط
نام فایل
برای ‘
~’ به این متغیر اشاره دارد. ignoreeof- اگر روی
رشته خالی
یا ‘
0’ تنظیم شده باشد و دستگاه ورودی یک ترمینال باشد، دستورend-of-file(که معمولاً توسط کاربر با فشردن^Dدر یک خط خالی ایجاد میشود) باعث میشود که شل عبارترا به جای خروج چاپ کند. این کار از بسته شدن تصادفی شل جلوگیری میکند. از نظر تاریخی، این تنظیم پس از ۲۶ کاراکتر EOF متوالی برای جلوگیری از حلقههای بینهایت خارج میشد.Use "exit" to leave tcsh.اگر روی یک عدد ‘n’ تنظیم شود، شل از n - 1 دستور
end-of-fileمتوالی چشمپوشی میکند و در nاُمین بار خارج میشود (+).اگر مقداردهی نشده باشد، ‘
1’ استفاده میشود؛ بدین معنی که شل با یک^Dخارج میشود. implicitcd(+)- در صورت
تنظیم، شل
با نام یک
دایرکتوری
که به عنوان
یک دستور
تایپ شده به
گونهای
رفتار
میکند که
گویی
درخواستی
برای رفتن
به آن
دایرکتوری
بوده است.
اگر روی
verboseتنظیم شود، تغییر دایرکتوری در خروجی استاندارد منعکس میشود.این رفتار در اسکریپتهای پوسته غیرتعاملی، یا برای رشتههای دستوری با بیش از یک کلمه، غیرفعال میشود. تغییر دایرکتوری نسبت به اجرای فرمانی با نام مشابه اولویت دارد، اما پس از جایگزینیهای alias انجام میشود. بسطهای تیلدا و متغیر طبق انتظار کار میکنند.
inputmode(+)- اگر روی
‘
insert’ یا ‘overwrite’ تنظیم شود، ویرایشگر را در ابتدای هر خط به آن حالت ورودی میبرد. killdup(+)- مدیریت
ورودیهای
تکراری در
حلقه حذف (kill ring)
را کنترل
میکند.
اگر روی ‘
all’ تنظیم شود، فقط رشتههای یکتا وارد حلقه حذف میشوند.اگر روی ‘
prev’ تنظیم شود و آخرین رشته حذفشده با رشته حذفشده فعلی یکسان باشد، رشته فعلی وارد حلقه نمیشود.اگر روی ‘
erase’ تنظیم شود و همان رشته در حلقه حذف پیدا شود، رشته قدیمی پاک شده و رشته فعلی درج میشود. killring(+)- تعداد
رشتههای
حذفشده را
که باید در
حافظه
نگهداری
شوند، مشخص
میکند.
بهطور پیشفرض روی ‘
30’ تنظیم شده است.اگر تنظیم نشده باشد یا روی مقداری کمتر از ‘
2’ تنظیم شود، پوسته فقط اخیراً حذفشدهترین رشته را نگهداری میکند.رشتهها توسط دستورات ویرایشگری که رشتههای متنی را پاک (kill) میکنند، مانند
backward-delete-word ،kill-lineو غیره، و همچنین دستورcopy-region-as-killدر حلقه حذف (killring) قرار میگیرند. دستور ویرایشگرyankاخیراً حذفشدهترین رشته را به خط فرمان بازمیگرداند (yank)، در حالی کهyank-pop(نگاه کنید به دستورات ویرایشگر (+) ) میتواند برای بازیابی رشتههای حذفشده قبلی استفاده شود. listflags(+)- اگر روی
‘
x ،’ ‘a’ یا ‘A ،’ یا هر ترکیبی از آنها (مانند ‘xA’) تنظیم شود، به عنوان گزینههایls-Fاستفاده میشوند و باعث میشوند مانند موارد زیر عمل کند:ls -xF ls -Fa ls -FA
یا یک ترکیب، برای مثال
ls -FxAاگر کلمه اول شامل ‘
a’ باشد، همه فایلها را نشان میدهد (حتی اگر با یک ‘.’ شروع شوند).اگر کلمه اول شامل ‘
A’ باشد، همه فایلها را به جز ‘.’ و ‘..’ نشان میدهد.اگر کلمه اول شامل ‘
x’ باشد، مرتبسازی را به صورت افقی (سطری) به جای عمودی (ستونی) انجام میدهد.اگر کلمه دوم
listflagsتنظیم شده باشد، به عنوان مسیر ls(1) استفاده میشود. listjobs(+)- اگر تنظیم
شود، هنگام
معلق شدن یک
شغل (job)، همه
شغلها
فهرست
میشوند.
اگر روی ‘
long’ تنظیم شود، فهرستبندی در قالب طولانی خواهد بود. listlinks(+)- اگر تنظیم
شود، دستور
توکار
ls-Fنوع فایلی را که هر پیوند نمادین (symbolic link) به آن اشاره دارد، نشان میدهد. listmax(+)- حداکثر
تعداد
مواردی که
دستور
ویرایشگر
list-choicesبدون پرسش اولیه فهرست میکند. listmaxrows(+)- حداکثر
تعداد
ردیفهای
مواردی که
دستور
ویرایشگر
list-choicesبدون پرسش اولیه فهرست میکند. loginsh(+)- اگر پوسته
یک پوستهٔ
لاگین
(ورود)
باشد، توسط
پوسته
تنظیم
میشود.
مقداردهی
یا لغو آن
درون یک
پوسته هیچ
تأثیری
ندارد.
همچنین
ببینید:
shlvl. logout(+)- توسط پوسته
قبل از خروج
عادی روی
‘
normal ،’ قبل از خروج خودکار روی ‘automatic’ و در صورتی که پوسته با یک سیگنال hangup کشته شده باشد روی ‘hangup’ تنظیم میشود (ببینید Signal handling). همچنین متغیر پوستهایautologoutرا ببینید. mail- فهرستی از
فایلها و
دایرکتوریها
برای بررسی
ایمیلهای
دریافتی،
که به طور
اختیاری یک
کلمه عددی
در ابتدای
آن قرار
میگیرد.
قبل از هر
خط فرمان (prompt)،
اگر ۱۰
دقیقه از
آخرین
بررسی
گذشته
باشد،
پوسته هر
فایل را
بررسی کرده
و پیام
(یا اگر
You have new mail.mailشامل چندین فایل باشد،) را در صورتی که اندازه فایل بزرگتر از صفر باشد و زمان تغییر (modification time) آن بزرگتر از زمان دسترسی (access time) آن باشد، نمایش میدهد.You have new mail in name.اگر در یک پوستهٔ ورود (login shell) هستید، برای جلوگیری از اعلانهای تکراری، هیچ فایل ایمیلی گزارش نمیشود مگر اینکه پس از زمان راهاندازی پوسته تغییر یافته باشد. بیشتر برنامههای لاگین هنگام ورود به شما اطلاع میدهند که آیا ایمیل دارید یا خیر.
اگر فایلی که در
mailمشخص شده یک دایرکتوری باشد، پوسته هر فایل درون آن دایرکتوری را به عنوان یک پیام جداگانه شمارش میکند و به فراخور حالت، عبارتیاYou have n mails.را گزارش خواهد داد. این قابلیت در درجه اول برای سیستمهایی فراهم شده است که نامهها را به این صورت ذخیره میکنند، مانند Andrew Mail System.You have n mails in name.اگر کلمه اول
mailعددی باشد، به عنوان بازه زمانی متفاوتی برای بررسی نامه (برحسب ثانیه) در نظر گرفته میشود.در شرایط بسیار نادر، ممکن است پوسته به جای
عبارتYou have new mail.را گزارش کند.You have mail. matchbeep(+)- اگر روی
‘
never’ تنظیم شود، تکمیل خودکار هرگز بوق نمیزند.اگر روی ‘
nomatch’ تنظیم شود، تنها زمانی که هیچ تطابقی وجود نداشته باشد بوق میزند.اگر روی ‘
ambiguous’ تنظیم شود، هنگام وجود چندین تطابق بوق میزند.اگر روی ‘
notunique’ تنظیم شود، هنگامی که یک تطابق دقیق و تطابقهای طولانیتر دیگری وجود داشته باشد بوق میزند.اگر تنظیم نشده باشد، ‘
ambiguous’ استفاده میشود. nobeep(+)- اگر تنظیم
شود، بوق
زدن به طور
کامل
غیرفعال
میشود.
همچنین
نگاه کنید
به
visiblebell. noclobber- اگر تنظیم
شود،
محدودیتهایی
روی تغییر
مسیر خروجی
اعمال
میشود تا
اطمینان
حاصل شود که
فایلها به
طور تصادفی
بازنویسی و
نابود
نمیشوند و
اینکه
تغییر
مسیرهای
‘
>>’ به فایلهای موجود ارجاع میدهند، همانطور که در بخش ورودی/خروجی (Input/output) توضیح داده شده است.اگر حاوی ‘
ask’ باشد، به جای بروز خطا یک تاییدیه تعاملی نمایش داده میشود.اگر حاوی ‘
notempty’ باشد، استفاده از ‘>’ روی فایلهای خالی مجاز است. noding- در صورت
تنظیم شدن،
چاپ
در مشخصکنندههای زمان اعلان
DING!promptدر هنگام تغییر ساعت غیرفعال میشود. noglob- در صورت تنظیم شدن، جایگزینی نام فایل (Filename substitution) و جایگزینی پشته دایرکتوری (+) (Directory stack substitution (+)) غیرفعال میشوند. این ویژگی بیش از همه در اسکریپتهای شل که با نام فایلها سر و کار ندارند، یا پس از دریافت فهرستی از نامهای فایل که در آن گسترشهای بیشتر مطلوب نیست، کاربرد دارد.
nokanji(+)- اگر تنظیم
شده باشد و
شل از Kanji
پشتیبانی
کند (متغیر
شل
versionرا ببینید)، غیرفعال میشود تا بتوان از کلید meta استفاده کرد. nonomatch- در صورت
تنظیم شدن،
چنانچه یک
جایگزینی
نام فایل (Filename
substitution) یا
جایگزینی
پشته
دایرکتوری
(+) (Directory stack substitution (+)) با
هیچ فایل
موجودی
مطابقت
نداشته
باشد، به
جای ایجاد
خطا بدون
تغییر رها
میشود. با
این حال، در
صورتی که
ساختار
جایگزینی
نادرست
باشد
(بدریخت
باشد)،
همچنان خطا
محسوب
میشود.
برای مثال،
همچنان با خطا مواجه میشود.
echo [ nostat(+)- فهرستی از دایرکتوریها (یا الگوهای تطبیق فایل glob که با دایرکتوریها مطابقت دارند؛ بخش Filename substitution را ببینید) که در طول عملیات تکمیل خودکار نباید روی آنها stat(2) انجام شود. این متغیر معمولاً برای مستثنی کردن دایرکتوریهایی استفاده میشود که فراخوانی stat(2) روی آنها زمان بسیار زیادی میبرد، مانند /afs.
notify- در صورت تنظیم، شل پایان کارها (jobs) را به صورت ناهمگام اعلام میکند. حالت پیشفرض این است که اتمام کارها دقیقاً پیش از نمایش اعلان شل (prompt) گزارش داده شود.
oid(+)- شناسه سازمانی (organization ID) واقعی کاربر. (فقط در Domain/OS)
owd(+)- دایرکتوری
کاری قبلی،
معادل
‘
-’ که توسطcdوpushdاستفاده میشود. همچنین متغیرهای شلcwdوdirstackرا ببینید. padhour- در صورت تنظیم، چاپ صفر پیشوند ('0') برای ساعتها در قالبهای ۲۴ و ۱۲ ساعته فعال میشود. به عنوان مثال، ‘07:45:42’ در مقایسه با ‘7:45:42’.
parseoctal- برای حفظ سازگاری با نسخههای قدیمیتر، متغیرهای عددی که با 0 شروع میشوند به عنوان مبنای هشت (octal) تفسیر نمیشوند. تنظیم این متغیر، تجزیه صحیح مبنای هشت را فعال میکند.
path- فهرستی از
دایرکتوریها
که برای
یافتن
دستورات
اجرایی در
آنها
جستجو
میشود.
یک کلمه تهی (null) دایرکتوری جاری را مشخص میکند.
اگر متغیر
pathوجود نداشته باشد، تنها نامهای کامل مسیر اجرا خواهند شد.متغیر
pathهنگام راهاندازی توسط شل از روی متغیر محیطیPATHتنظیم میشود، یا در صورتی کهPATHوجود نداشته باشد، روی یک مقدار پیشفرض وابسته به سیستم تنظیم میگردد، مانند(/usr/local/bin /usr/bsd /bin /usr/bin .)بسته به نحوه کامپایل شدن شل، ممکن است شل کاراکتر ‘
.’ را در ابتدا یا انتهایpathقرار دهد یا آن را به طور کامل حذف کند؛ متغیر شلversionرا ببینید.شلی که نه گزینه
-cو نه گزینه-tبه آن داده شده باشد، پس از خواندن ~/.tcshrc و هر بار کهpathمجدداً تنظیم میشود، محتویات دایرکتوریهای موجود درpathرا هش (فهرستبندی) میکند.اگر در حین فعال بودن شل، دستور جدیدی به دایرکتوری موجود در
pathاضافه شود، ممکن است لازم باشد کاربر یکrehashانجام دهد تا شل بتواند آن را پیدا کند. printexitvalue(+)- در صورت
تنظیم
بودن،
چنانچه یک
برنامه
تعاملی با
وضعیتی غیر
از صفر خارج
شود، شل
عبارت
را چاپ میکند.
Exit status prompt- رشتهای که
قبل از
خواندن هر
دستور از
ترمینال
چاپ میشود.
متغیر
promptمیتواند شامل هر یک از توالیهای قالببندی (+) زیر باشد که با اطلاعات مشخصشده جایگزین میشوند:- قالب
- اطلاعات خط فرمان (Prompt)
%/- دایرکتوری کاری فعلی.
%~- دایرکتوری
کاری
فعلی، اما
با نمایش
دایرکتوری
خانگی
کاربر با
‘
~’ و دایرکتوری خانگی سایر کاربران با ‘~user’ مطابق با Filename substitution. جایگزینی ‘~user’ تنها در صورتی رخ میدهد که پوسته قبلاً از ‘~user’ در یک مسیر در نشست جاری استفاده کرده باشد. %c[[0]n],%.[[0]n]- بخش
انتهایی
دایرکتوری
کاری
فعلی، یا
در صورت
تعیین رقم
n ، به
تعداد n
بخش
انتهایی.
اگر n با
‘
0’ شروع شود، تعداد بخشهای رد شده قبل از بخش(های) انتهایی در قالب ‘/<skipped’ قرار میگیرد. اگر متغیر پوسته>trailingellipsisتنظیم شده باشد، بخشهای رد شده با یک علامت تعلیق (...) نمایش داده میشوند تا کل آن به شکل ‘...trailing’ درآید. جایگزینی ‘~’ مانند ‘%~’ در بالا انجام میشود، اما مؤلفه ‘~’ هنگام شمارش بخشهای انتهایی نادیده گرفته میشود. %C- مانند ‘
%c ،’ اما بدون جایگزینی ‘~’. %h,%!,!- شماره رویداد تاریخچه جاری.
%M- نام کامل میزبان (hostname).
%m- نام
میزبان تا
نخستین
‘
.’. %S(%s)- شروع (پایان) حالت برجسته (standout).
%B(%b)- شروع (پایان) حالت پررنگ (bold).
%U (%u)- شروع (پایان) حالت زیرخطدار (underline).
%t,%@- زمان جاری در قالب ۱۲ ساعته با ق.ظ/ب.ظ (AM/PM).
%T- مانند ‘
%t ،’ اما در قالب ۲۴ ساعته (به متغیر پوستهampmنیز مراجعه کنید). %p- زمان جاری به صورت ‘دقیق’ در قالب ۱۲ ساعته با ق.ظ/ب.ظ (AM/PM)، همراه با ثانیهها.
%P- مانند ‘
%p ،’ اما در قالب ۲۴ ساعته (به متغیر پوستهampmنیز مراجعه کنید). \c- c مشابه
bindkeyتجزیه میشود. ^c- c مانند
bindkeyتجزیه میشود. %%- یک نویسهٔ
تکی
‘
%’. %n- نام کاربری.
%N- نام کاربری مؤثر.
%j- تعداد jobها (کارهای در حال اجرا).
%d- روز هفته در قالب ‘Day’.
%D- روز ماه در قالب ‘dd’.
%w- ماه در قالب ‘Mon’.
%W- ماه در قالب ‘mm’.
%y- سال در قالب ‘yy’.
%Y- سال در قالب ‘yyyy’.
%l- ترمینال (tty) پوسته.
%L- از انتهای اعلان (prompt) تا انتهای صفحه نمایش یا انتهای خط را پاک میکند.
%$- متغیر شل
یا محیطی
که
بلافاصله
پس از
‘
$’ آمده است را بسط میدهد. %#- برای
کاربران
عادی
‘
>’ (یا نویسه اول از متغیر شلpromptchars) و برای کاربر ارشد (superuser) ‘#’ (یا نویسه دوم ازpromptchars) قرار میدهد. %{string%}- رشته
stringرا به عنوان یک توالی گریز (escape sequence) لفظی اضافه میکند. این مورد باید تنها برای تغییر ویژگیهای ترمینال استفاده شود و نباید مکان نشانگر را جابجا کند. این مورد نمیتواند آخرین توالی درpromptباشد. %?- کد بازگشتی دستوری که درست پیش از اعلان اجرا شده است.
%R- در
prompt2 ،وضعیت تجزیهکننده (parser). درprompt3 ،رشته تصحیحشده. درhistory ،رشته تاریخچه.
‘
%B ،’ ‘%S ،’ ‘%U’ و ‘%{string’ فقط در شلهای هشتبیتی بدون دستکاری (eight-bit-clean) در دسترس هستند؛ متغیر شل%}versionرا ببینید.توالیهای پررنگ (bold)، برجسته (standout) و زیرخط (underline) اغلب برای تمایز اعلان شل کاربر ارشد (superuser) به کار میروند. برای نمونه،
> set prompt = "%m [%h] %B[%@]%b [%/] you rang? "tut [37][2:54pm][/usr/accts/sys] you rang? _
اگر ‘
%t ،’ ‘%@ ،’ ‘%T ،’ ‘%p’ یا ‘%P’ استفاده شود وnodingتنظیم نشده باشد، آنگاه به جای زمان واقعی، هنگام تغییر ساعت (یعنی دقیقه ‘:00’ ) عبارتچاپ میشود.DING!در شلهای تعاملی بهطور پیشفرض روی ‘
%#’ تنظیم شده است. prompt2(+)- رشتهای که
به عنوان
اعلان در
حلقههای
whileوforeachو پس از خطوط منتهی به ‘\’ نمایش داده میشود. میتوان همان توالیهای قالببندی موجود درpromptرا استفاده کرد؛ به تفاوت معنای متغیر ‘%R’ توجه داشته باشید.در شلهای تعاملی بهطور پیشفرض روی ‘
%R?’ تنظیم شده است. prompt3(+)- رشتهای که
هنگام
تأیید
تصحیح
خودکار
املایی به
عنوان
اعلان
نمایش داده
میشود.
میتوان
همان
توالیهای
قالببندی
موجود در
promptرا استفاده کرد؛ به تفاوت معنای متغیر ‘%R’ توجه داشته باشید.به صورت پیشفرض در پوستههای تعاملی بر روی ‘
CORRECT>%R (y|n|e|a)?’ تنظیم شده است. promptchars(+)- در صورت
تنظیم شدن
(به یک رشته
دو
نویسهای)،
دنباله
قالببندی
‘
%#’ در متغیر پوستهpromptبرای کاربران عادی با نویسه اول و برای کاربر ریشه (superuser) با نویسه دوم جایگزین میشود. pushdtohome(+)- در صورت
تنظیم شدن،
دستور
pushdبدون آرگومان مانندcdعملرا انجام میدهد.pushd ~ pushdsilent(+)- در صورت
تنظیم شدن،
pushdوpopdپشته دایرکتوری را چاپ نمیکنند. recexact(+)- در صورت تنظیم شدن، تکمیل خودکار بر روی یک تطابق دقیق اعمال میشود، حتی اگر تطابق طولانیتری ممکن باشد.
recognize_only_executables(+)- در صورت تنظیم شدن، فهرستبندی دستورها تنها فایلهایی از مسیر را نمایش میدهد که قابل اجرا هستند. کند است.
rmstar(+)- در صورت
تنظیم شدن،
پیش از
اجرای
از کاربر تاییدیه گرفته میشود.
rm * rprompt(+)- رشتهای که
هنگام
نمایش
اعلان (prompt) در
سمت چپ، در
سمت راست
صفحه (پس از
ورودی
دستور) چاپ
میشود. این
متغیر
نویسههای
قالببندی
مشابه با
promptرا میشناسد. در صورت لزوم بهطور خودکار ناپدید و دوباره ظاهر میشود تا اطمینان حاصل شود که ورودی دستور پوشانده نمیشود، و تنها در صورتی ظاهر میشود که اعلان، ورودی دستور و خودش همگی در خط اول جا شوند.اگر
editتنظیم نشده باشد،rpromptپس از خط اعلان و پیش از ورودی دستور چاپ خواهد شد. savedirs(+)- در صورت
تنظیم
بودن، شل
پیش از خروج
دستور
را اجرا میکند.
dirs -Sاگر کلمه اول روی یک عدد تنظیم شود، حداکثر به همان تعداد از مدخلهای پشتهٔ دایرکتوری ذخیره میشوند.
savehist- در صورت
تنظیم
بودن، شل
پیش از خروج
دستور
را اجرا میکند.
history -Sاگر کلمه اول روی یک عدد تنظیم شود، حداکثر به همان تعداد خط ذخیره میشود. (این عدد باید کمتر یا مساوی تعداد مدخلهای
historyباشد؛ اگر بزرگتر از تعداد تنظیماتhistoryتعیین شود، تنها مدخلهایhistoryذخیره خواهند شد.)اگر کلمه دوم روی ‘
merge’ تنظیم شده باشد، فهرست تاریخچه بهجای جایگزین شدن با فایل تاریخچهٔ موجود (در صورت وجود)، با آن ادغام شده و بر اساس برچسب زمان مرتب میشود و تازهترین رویدادها نگهداشته میشوند.اگر کلمه دوم روی ‘
merge’ و کلمه سوم روی ‘lock’ تنظیم شده باشد، بهروزرسانی فایل تاریخچه با دیگر نشستهای شل که احتمالاً میخواهند تاریخچه را دقیقاً در همان زمان ادغام کنند، بهصورت سریالی (پیاپی) انجام خواهد شد. (+) sched(+)- قالبی که
دستور
توکار
schedرویدادهای زمانبندیشده را در آن چاپ میکند؛ اگر مشخص نشود، از ‘%h\t%T\t%R\n’ استفاده میشود. توالیهای قالب در بالا ذیلpromptتوضیح داده شدهاند؛ به معنی متغیر ‘%R’ توجه داشته باشید. shell- فایلی که پوسته در آن قرار دارد. این متغیر در پوستههای منشعبشده (forked) برای تفسیر فایلهایی به کار میرود که بیتهای اجرایی آنها تنظیم شده است، اما توسط سیستم قابل اجرا نیستند. (به توضیحات بخش اجرای دستورات توکار و غیرتوکار (Builtin and non-builtin command execution) مراجعه کنید.) مقدار اولیه آن با محل قرارگیری پوسته (وابسته به سیستم) تعیین میشود.
shlvl(+)- تعداد
پوستههای
تو در تو. در
پوستههای
ورود (login shells) به ۱
بازنشانی
میشود.
همچنین
نگاه کنید
به
loginsh. status- وضعیت خروج
از آخرین
دستور یا
بسط
نقلقول
معکوس، یا
هر دستوری
در یک خط
لوله (pipeline) به
statusمنتقل میشود. (این همچنین رفتار پیشفرض csh(1) است.) این حالت پیشفرض با آنچه POSIX الزام میکند (بازگرداندن وضعیتِ تنها آخرین دستور) مطابقت ندارد. برای تطابق با رفتار POSIX، بایدanyerrorرا حذف (unset) کنید.اگر متغیر
anyerrorتنظیم نشده باشد، وضعیت خروج یک خط لوله تنها بر اساس آخرین دستور در خط لوله تعیین میشود، و وضعیت خروج یک بسط نقلقول معکوس بهstatusمنتقل نمیشود.اگر دستوری به طور غیرعادی پایان یابد، مقدار 0200 به وضعیت اضافه میشود. دستورات توکاری که با شکست مواجه میشوند وضعیت خروج ‘
1’ و سایر دستورات توکار وضعیت ‘0’ را بازمیگردانند. symlinks(+)- میتواند
روی چندین
مقدار
مختلف
تنظیم شود
تا تفکیک
پیوند
نمادین (‘symlink’)
را کنترل
کند:
اگر روی ‘
chase’ تنظیم شده باشد، هر زمان که دایرکتوری جاری به دایرکتوریای تغییر کند که حاوی پیوند نمادین (symbolic link) است، به نام واقعی دایرکتوریای که پیوند به آن اشاره میکند بسط داده میشود. این مورد برای دایرکتوری خانگی (home) کاربر کار نمیکند؛ این یک باگ است.اگر روی ‘
ignore’ تنظیم شده باشد، پوسته تلاش میکند یک دایرکتوری جاری نسبت به دایرکتوری جاری پیش از گذر از پیوند نمادین بسازد. این بدان معناست کهاز طریق یک پیوند نمادین و سپسcdفرد را به دایرکتوری اصلی بازمیگرداند. این مورد فقط بر دستورهای توکار (builtin) و تکمیل نام فایل تأثیر میگذارد.cd ..اگر روی ‘
expand’ تنظیم شده باشد، پوسته تلاش میکند پیوندهای نمادین را با بسط دادن واقعی آرگومانهایی که شبیه نام مسیر به نظر میرسند، اصلاح کند. این مورد بر هر دستوری تأثیر میگذارد، نه فقط دستورهای توکار. متأسفانه این قابلیت برای نامهای فایلی که تشخیص آنها سخت است، مانند نامهایی که در گزینههای دستور جاسازی شدهاند، کار نمیکند. با استفاده از نقلقول (quoting) میتوان از بسط دادن جلوگیری کرد. اگرچه این تنظیم معمولاً راحتترین حالت است، اما گاهی در مواردی که موفق به تشخیص آرگومانی که باید بسط داده شود نمیشود، گمراهکننده و گاه گیجکننده است. یک مصالحه مناسب استفاده از ‘ignore’ و استفاده از دستور ویرایشگرnormalize-path(متصل شده بهصورت پیشفرض به^X-n) در صورت لزوم است.چند مثال برای درک بهتر ارائه شده است. ابتدا، بیایید چند دایرکتوری آزمایشی ایجاد کنیم:
> cd /tmp > mkdir from from/src to > ln -s from/src to/dst
در اینجا رفتار در حالتی که
symlinksتنظیم نشده است آورده شده است:> cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ..; echo $cwd /tmp/from
در اینجا رفتار در حالتی که
symlinksبر روی ‘chase’ تنظیم شده باشد آمده است:> cd /tmp/to/dst; echo $cwd /tmp/from/src > cd ..; echo $cwd /tmp/from
در اینجا رفتار در حالتی که
symlinksبر روی ‘ignore’ تنظیم شده باشد آمده است:> cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ..; echo $cwd /tmp/to
در اینجا رفتار در حالتی که
symlinksبر روی ‘expand’ تنظیم شده باشد آورده شده است:> cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ..; echo $cwd /tmp/to > cd /tmp/to/dst; echo $cwd /tmp/to/dst > cd ".."; echo $cwd /tmp/from > /bin/echo .. /tmp/to > /bin/echo ".." ..
توجه داشته باشید که بسط ‘
expand’:- برای
دستورهای
توکار
مانند
cdدقیقاً شبیه ‘ignore’ عمل میکند. - با نقلقولگذاری (کوتیشن) جلوی آن گرفته میشود.
- پیش از ارسال نام فایلها به دستورهای غیرتوکار رخ میدهد.
- برای
دستورهای
توکار
مانند
tcsh(+)- شماره نگارش پوسته در قالب ‘R.VV.PP ،’ که در آن ‘R’ شماره انتشار اصلی، ‘VV’ نگارش کنونی، و ‘PP’ سطح وصله (patchlevel) است.
term- نوع ترمینال. معمولاً در ~/.login همانطور که در بخش راهاندازی و خاموشسازی توضیح داده شده، تنظیم میشود.
time- اگر روی یک
عدد تنظیم
شود، دستور
توکار
timeپس از هر دستوری که بیش از آن مقدار ثانیه از CPU زمان ببرد، به طور خودکار اجرا میشود.اگر کلمه دومی وجود داشته باشد، به عنوان رشته قالببندی (format string) برای خروجی دستور توکار
timeاستفاده میشود.(u) توالیهای زیر را میتوان در رشته قالب
timeبه کار برد:- Format
- Time information
%U- مدت زمانی که پردازش در حالت کاربر سپری کرده است، به ثانیه پردازنده.
%S- مدت زمانی که پردازش در حالت کرنل سپری کرده است، به ثانیه پردازنده.
%E- زمان سپریشده واقعی (ساعت دیواری) به ثانیه.
%P- درصد استفاده از پردازنده که به صورت (%U + %S) / %E محاسبه میشود.
%W- تعداد دفعاتی که پردازش مبادله (swap) شده است.
%X- میانگین فضای متنی (اشتراکی) استفادهشده بر حسب کیلوبایت.
%D- میانگین فضای داده/پشته (غیراشتراکی) استفادهشده بر حسب کیلوبایت.
%K- مجموع فضای استفادهشده (%X + %D) بر حسب کیلوبایت.
%M- حداکثر حافظهای که پردازش در هر لحظه استفاده کرده است، بر حسب کیلوبایت.
%F- تعداد خطاهای عمده صفحه (صفحهای که نیاز به فراخوانی از دیسک داشت).
%R- تعداد خطاهای جزئی صفحه.
%I- تعداد عملیات ورودی.
%O- تعداد عملیات خروجی.
%r- تعداد پیامهای سوکت دریافت شده.
%s- تعداد پیامهای ارسالی سوکت.
%k- تعداد سیگنالهای دریافتشده.
%w- تعداد تعویضهای زمینهای داوطلبانه (انتظارها).
%c- تعداد تعویضهای زمینهای غیرداوطلبانه.
تنها چهار توالی اول در سیستمهای فاقد توابع محدودیت منابع BSD پشتیبانی میشوند. قالب زمان پیشفرض ‘
%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww’ برای سیستمهایی است که از گزارش مصرف منابع پشتیبانی میکنند، و ‘%Uu %Ss %E %P’ برای سیستمهایی است که پشتیبانی نمیکنند.تحت سیستمعامل DYNIX/ptx از شرکت Sequent، توالیهای ‘
%X ،’ ‘%D ،’ ‘%K ،’ ‘%r’ و ‘%s’ در دسترس نیستند، اما توالیهای اضافی زیر موجود میباشند:- Format
- Description Sequent DYNIX/ptx time information
%Y- تعداد فراخوانیهای سیستمیِ (system calls) انجامشده.
%Z- تعداد صفحاتی که برحسب تقاضا با صفر پر شدهاند (zero-filled on demand).
%i- تعداد دفعاتی که اندازهٔ مجموعه مقیم (resident set size) یک فرآیند توسط کرنل افزایش یافته است.
%d- تعداد دفعاتی که اندازهٔ مجموعه مقیم یک فرآیند توسط کرنل کاهش یافته است.
%l- تعداد فراخوانیهای سیستمی خواندن (read) انجامشده.
%m- تعداد فراخوانیهای سیستمی نوشتن (write) انجامشده.
%p- تعداد خواندنها از دیسکگردانهای خام (raw disk devices).
%q- تعداد نوشتنها در دیسکگردانهای خام (raw disk devices).
و قالب زمانی پیشفرض عبارت است از ‘
%Uu %Ss %E %P %I+%Oio %Fpf+%Ww’.توجه داشته باشید که درصد استفاده از CPU در سیستمهای چندپردازندهای میتواند بیشتر از ۱۰۰٪ باشد.
tperiod(+)- دوره
زمانی، بر
حسب دقیقه،
بین
اجراهای
نام مستعار
ویژهٔ
periodic. tty(+)- نام tty، یا در صورتی که به هیچ tty متصل نباشد، خالی است.
uid(+)- شناسهٔ واقعی کاربر (real user ID).
user- نام کاربری ورود (login name) کاربر.
verbose- در صورت
تنظیم شدن،
باعث
میشود
کلمات هر
دستور پس از
جایگزینی
تاریخچه (در
صورت وجود)
چاپ شوند.
توسط
گزینهٔ خط
فرمان
-vتنظیم میشود. version(+)- مهر شناسهٔ
نسخه. شامل
شماره
نسخهٔ
پوسته (نگاه
کنید به
tcsh)،مبدأ، تاریخ انتشار، ارائهدهنده (vendor)، سیستمعامل و معماری ماشین (نگاه کنید بهVENDOR ،OSTYPEوMACHTYPE) و فهرستی جداشده با کاما از گزینههایی است که در زمان کامپایل تنظیم شدهاند. گزینههایی که بهطور پیشفرض در توزیع فعال هستند مشخص شدهاند.گزینههای پشتیبانیشده برای
versionعبارتند از:- گزینه
- توضیحات
8b- پوسته از نویسههای ۸-بیتی به طور کامل پشتیبانی میکند؛ پیشفرض.
7b- پوسته از نویسههای ۸-بیتی به طور کامل پشتیبانی نمیکند.
wide- پوسته از رمزگذاریهای چندبایتی (مانند UTF-8) پشتیبانی میکند.
nls- از NLS سیستم استفاده میشود؛ پیشفرض برای سیستمهای دارای NLS.
lf- پوستههای ورود (login shells) فایل /etc/csh.login را پیش از /etc/csh.cshrc (به جای پس از آن) و فایل ~/.login را پیش از ~/.tcshrc و ~/.history اجرا میکنند.
dl- برای
امنیت
بیشتر،
‘
.’ در انتهایpathقرار میگیرد؛ پیشفرض. nd- برای
امنیت
بیشتر،
‘
.’ ازpathحذف میشود. vi- ویرایش به سبک vi(1) به جای سبک emacs(1) پیشفرض است.
dtr- پوستههای لاگین هنگام خروج، DTR را قطع میکنند.
bye- دستور
byeمترادفی برایlogoutبوده وlogنام جایگزینی برایwatchlogاست. al- قابلیت
autologoutفعال است؛ حالت پیشفرض. kan- اگر با
توجه به
تنظیمات
محلی (locale)
مناسب
باشد، از
کانجی (Kanji)
استفاده
میشود،
مگر اینکه
متغیر
پوستهٔ
nokanjiتنظیم شده باشد. sm- از malloc(3) سیستم استفاده میشود.
hb- هنگام
اجرای
اسکریپتهای
پوسته،
قرارداد
شبیهسازی میشود.
#!interpreter arg... ng- دستور
توکار
newgrpدر دسترس است. rh- پوسته
تلاش
میکند
متغیر
محیطی
REMOTEHOSTرا مقداردهی کند. afs- اگر احراز
هویت محلی
ناموفق
باشد،
پوسته رمز
عبور شما
را با سرور
kerberos بررسی و
اعتبارسنجی
میکند.
متغیر
پوستهٔ
afsuserیا متغیر محیطیAFSUSERدر صورت تنظیم شدن، نام کاربری محلی شما را بازنویسی (override) میکنند.
یک مدیر سیستم ممکن است رشتههای بیشتری را برای مشخص کردن تفاوتها در نسخهٔ محلی وارد کند.
vimode(+)- در صورت لغو
تنظیم،
رفتار
کلیدهای
مقید مختلف
بیشتر شبیه
به شیوهٔ
emacs(1)
میشود:
مرزهای
کلمات توسط
wordcharsدر مقابل دیگر نویسهها تعیین میشوند.در صورت تنظیم، رفتار کلیدهای مقید مختلف بیشتر شبیه به شیوهٔ vi(1) میشود: مرزهای کلمات توسط
wordcharsدر مقابل فاصلههای سفید (whitespace) در مقابل دیگر نویسهها تعیین میشوند؛ رفتار مکاننما به حالت فعلی vi (حالتهای command، delete، insert، replace) بستگی دارد.این متغیر توسط
bindkey-eلغو تنظیم شده و توسطbindkey-vتنظیم میشود. در صورت نیاز، کاربر میتواندvimodeرا پس از این عملیاتهایbindkeyبهطور صریح تنظیم یا لغو تنظیم کند. visiblebell(+)- در صورت
تنظیم، به
جای زنگ
صوتی از
چشمکزدن
صفحه
استفاده
میشود.
همچنین
ببینید:
nobeep. watch(+)- فهرستی از
جفتهای
کاربر/ترمینال
برای نظارت
بر ورودها و
خروجها.
اگر کاربر
برابر با
‘
any’ باشد، همهٔ ترمینالها برای آن کاربر نظارت میشوند و برعکس. تنظیمwatchبههمهٔ کاربران و ترمینالها را نظارت میکند. برای مثال،(any any)set watch = (george ttyd1 any console $user any)
فعالیتهای کاربر ‘
george’ روی ‘ttyd1 ،’ هر کاربری روی کنسول، و خود کاربر (یا یک متجاوز) را روی هر ترمینالی گزارش میدهد.ورودها و خروجها بهطور پیشفرض هر ۱۰ دقیقه بررسی میشوند، اما کلمه اول
watchرا میتوان روی یک عدد تنظیم کرد تا هر چند دقیقه یکبار بررسی انجام شود. برای نمونه،set watch = (1 any any)
هرگونه ورود/خروج را هر یک دقیقه یکبار گزارش میدهد. برای افراد کمحوصله، دستور توکار
logیک گزارشwatchرا در هر زمانی ایجاد میکند. تمام ورودهای فعلی (مانند دستور توکارlog) هنگامی کهwatchبرای اولین بار مقداردهی میشود، گزارش میگردند.متغیر شل
whoقالب گزارشهایwatchرا کنترل میکند. who(+)- رشته قالب
برای
پیامهای
watchدنبالههای زیر با اطلاعات دادهشده جایگزین میشوند:- Format
- اطلاعات Who
%n- نام کاربری که وارد/خارج شده است.
%a- عمل مشاهدهشده، یعنی ‘logged on ،’ ‘logged off ،’ یا ‘replaced olduser on’.
%l- ترمینال (tty) که کاربر از طریق آن وارد/خارج شده است.
%M- نام کامل میزبان راه دور، یا ‘local’ اگر ورود/خروج از میزبان محلی بوده باشد.
%m- نام میزبان راه دور تا اولین ‘.’. اگر آدرس IP یا نمایشگر سامانه پنجره X باشد، نام کامل چاپ میشود.
‘
%M’ و ‘%m’ تنها در سیستمهایی در دسترس هستند که نام میزبان راه دور را در /etc/utmp ذخیره میکنند.اگر تنظیم نشده باشد،
استفاده میشود، یا%n has %a %l from %m.در سیستمهایی که نام میزبان راه دور را ذخیره نمیکنند.%n has %a %l. wordchars(+)- فهرستی از
نویسههای
غیرحرفی-عددی
که توسط
دستورهای
ویرایشگر
مانند
forward-word ،backward-wordو غیره بخشی از یک کلمه در نظر گرفته میشوند.اگر تنظیم نشده باشد، مقدار پیشفرض بر اساس وضعیت
vimodeتعیین میشود: اگرvimodeتنظیم نشده باشد، ‘*?_-.[]~=’ به عنوان پیشفرض استفاده میشود؛ اگرvimodeتنظیم شده باشد، ‘_’ به عنوان پیشفرض استفاده خواهد شد.
محیط (ENVIRONMENT)
AFSUSER(+)- معادل با
متغیر
پوستهٔ
afsuser. CLICOLOR_FORCE- توالیهای
رنگی برای
ls-Fبه طور معمول در صورتی که خروجی به یک ترمینال هدایت نشده باشد غیرفعال هستند. این رفتار را میتوان با تنظیم این متغیر لغو کرد، که همچنین فراخوانی ls(1) توسطls-Fرا به گونهای تغییر میدهد که به جای--color=autoاز--color=alwaysاستفاده کند.توجه داشته باشید که
colorباید تنظیم شده باشد تا این متغیر محیطی موثر واقع شود؛ به خودی خود،CLICOLOR_FORCEرنگ را برایls-Fفعال نمیکند. COMMAND_LINE- هنگام
فراخوانی
برنامهها
برای حالت
‘
`...`’ درcompletelist ، توسطtcshبه خط فرمان فعلی تنظیم میشود. بخشcompleteدر Builtin commands را ببینید. COLUMNS- تعداد ستونها در ترمینال. بخش Terminal management (+) را ببینید.
DISPLAY- توسط
سامانه
پنجره اکس (X
Window System) استفاده
میشود
(نگاه کنید
به X(1)).
در صورت
تنظیم
بودن، شل
autologoutرا مقداردهی نمیکند. EDITOR- مسیر
پرونده یک
ویرایشگر
پیشفرض. در
صورتی که
متغیر شل
editorsتنظیم نشده باشد، توسط دستور ویرایشگرrun-fg-editorاستفاده میشود. همچنین نگاه کنید به متغیر محیطیVISUAL. GROUP(+)- معادل با
متغیر شل
group. HOME- معادل با
متغیر شل
home. HOST(+)- با نام ماشینی که شل بر روی آن در حال اجراست مقداردهی اولیه میشود، همانطور که توسط فراخوان سیستمی gethostname(2) تعیین میگردد.
HOSTTYPE(+)- با نوع ماشینی که شل بر روی آن در حال اجراست مقداردهی اولیه میشود، همانطور که در زمان کامپایل مشخص شده است. این متغیر منسوخ شده است و در نسخههای آینده حذف خواهد شد.
HPATH(+)- فهرستی از
دایرکتوریهای
جداشده با
‘
:’ که دستور ویرایشگرrun-helpدر آنها به دنبال مستندات دستورها میگردد. LANG- محیط نویسهای ترجیحی را مشخص میکند. نگاه کنید به Native Language System support (+).
LC_CTYPE- در صورت تنظیم، تنها نحوهٔ مدیریت نویسههای ctype تغییر میکند. بخش پشتیبانی از سیستم زبان محلی (Native Language System support) (+) را ببینید.
LINES- تعداد خطوط ترمینال. بخش مدیریت ترمینال (Terminal management) (+) را ببینید.
LSCOLORS- یکی از دو
متغیر
محیطی است
که میتوان
از آن برای
تعریف
رنگهای
اختصاصی هر
فایل که
توسط
ls-Fاستفاده میشود (بههمراهLS_COLORS) بهره برد. این متغیر توسط برخی از نسخههای BSD از ls(1) استفاده میشود.در زمان راهاندازی
،متغیرLS_COLORSنسبت بهLSCOLORSاولویت دارد. اگر هر دو متغیرLSCOLORSیاLS_COLORSبا دستورsetenvمقداردهی شوند، آخرینsetenvاعمالشده استفاده میشود. اگرLSCOLORSبا دستورunsetenvحذف شود در حالی کهLS_COLORSهمچنان باsetenvتنظیم شده باشد، آنگاهLS_COLORSدوباره تجزیه میشود (با نادیده گرفتن هرگونه هشدار) تا تنظیمات آن مجدداً اعمال گردد.این متغیر یک رشتهٔ ۲۲ نویسهای است که از بههمپیوستن ۱۱ جفت بهصورت fb تشکیل شده است، که در آن f رنگ پیشزمینه و b رنگ پسزمینه است. اگر کمتر از ۱۱ جفت مشخص شود، برای مدخلهای باقیمانده از رنگهای پیشفرض استفاده میشود. اگر بیش از ۱۱ جفت مشخص شود، مقادیر اضافی نادیده گرفته میشوند.
ترتیب جفتهای ویژگی رنگ نسبت به متغیر معادل
LS_COLORS ،نوع فایل و رنگ پیشفرض به شرح زیر است:شاخص متغیر نوع فایل. [رنگ پیشفرض] 1 diدایرکتوری. [آبی پُررنگ] 2 lnپیوند نمادین. [فیروزهای پُررنگ] 3 soسوکت. [ارغوانی پُررنگ] 4 piلوله نامگذاریشده (FIFO). [زرد (یا قهوهای)] 5 exفایل قابل اجرا. [سبز پُررنگ] 6 bdدستگاه بلوکی. [زرد پُررنگ] 7 cdدستگاه نویسهای. [زرد پُررنگ] 8 suفایل دارای Setuid. [سفید روی قرمز] 9 sgفایل دارای Setgid. [سیاه روی زرد] 10 twدایرکتوری Sticky و قابل نوشتن توسط دیگران. [سیاه روی سبز] 11 owدایرکتوری قابل نوشتن توسط دیگران بدون Sticky. [آبی روی سبز] شناسههای کد رنگ به شرح زیر هستند:
- کد
- توضیحات
a- سیاه.
b- قرمز.
c- سبز.
d- زرد (یا قهوهای).
e- آبی.
f- ارغوانی.
g- فیروزهای (Cyan).
h- خاکستری روشن.
A- سیاه پُررنگ (Bold)، معمولاً به صورت خاکستری تیره نمایش داده میشود.
B- قرمز پُررنگ.
C- سبز پُررنگ.
D- زرد پُررنگ.
E- آبی پُررنگ.
F- سرخابی پُررنگ (Magenta).
G- فیروزهای پُررنگ.
H- خاکستری روشن پُررنگ؛ شبیه به سفید درخشان به نظر میرسد.
x- رنگ پیشزمینه یا پسزمینهٔ پیشفرض.
توجه داشته باشید که موارد فوق رنگهای استاندارد ANSI هستند. نمایش واقعی ممکن است بسته به قابلیتهای رنگی ترمینالِ در حال استفاده، متفاوت باشد.
رنگهای پیشفرض مطابق با متغیرهای رنگ در
LS_COLORSهستند، و با رنگهای پیشفرضی که در برخی نسخههای BSD از ls(1) استفاده میشوند، یکسان نیستند. LS_COLORS- یکی از دو
متغیر
محیطی است
که
میتواند
برای تعیین
رنگهای
مجزای هر
فایلِ مورد
استفاده
توسط
ls-F(در کنارLSCOLORS) به کار رود. این متغیر توسط نسخهٔ GNU coreutils از ls(1) استفاده شده و میتواند توسط dircolors(1) تنظیم شود.هنگام راهاندازی
tcsh،LS_COLORSنسبت بهLSCOLORSاولویت دارد. اگر هر دو متغیرLSCOLORSیاLS_COLORSباsetenvمقداردهی شوند، جدیدترینsetenvاستفاده میشود. اگرLS_COLORSباunsetenvحذف شود در حالی کهLSCOLORSهمچنانsetenvشده باشد، آنگاهLSCOLORSدوباره (بدون نمایش هیچگونه هشداری) تجزیه میشود تا تنظیمات آن مجدداً اعمال گردد.قالب این متغیر یادآور قالب فایل termcap(5) است؛ فهرستی جداشده با ‘
:’ از عبارتهایی به شکل"xx=value"یا"*ext=value".شکل اول،
"xx=value" ،که در آن"xx"یک نام متغیر دو نویسهای است، از متغیرهای زیر، کد رنگ یا توالیهای گریز استاندارد ISO 6429 پیشفرض مربوط به آنها، و نوع فایل پشتیبانی میکند:Var پیشفرض نوع فایل. [رنگ پیشفرض] no0متن عادی (غیر نامفایل). fi0فایل معمولی. di01;34دایرکتوری. [آبی پررنگ] ln01;36پیوند نمادین (Symbolic link). [فیروزهای پررنگ] pi33لوله نامگذاریشده (FIFO). [زرد (یا قهوهای)] so01;35سوکت. [ارغوانی پررنگ] do01;35دُر (Door). [ارغوانی پررنگ] bd01;33دستگاه بلوکی (Block device). [زرد پررنگ] cd01;33دستگاه نویسهای (Character device). [زرد پررنگ] ex01;32فایل اجرایی. [سبز پررنگ] mi(هیچ) فایل ناموجود (مقصد پیوند نمادین یتیم). پیشفرض آن fi است.or(هیچ) پیوند نمادین یتیم (شکسته). پیشفرض آن ln است.lc^[[کد چپ (Left code). rcmکد راست (Right code). ec(هیچ) کد پایانی. جایگزین lc+no+rc میشود.su37;41فایل Setuid. [سفید روی قرمز] sg30;43فایل Setgid. [سیاه روی زرد] tw30;42دایرکتوری با بیت چسبان (sticky) و قابل نوشتن برای دیگران. [سیاه روی سبز] ow34;42دایرکتوری قابل نوشتن برای دیگران اما بدون بیت چسبان. [آبی روی سبز] st37;44دایرکتوری با بیت چسبان اما غیرقابل نوشتن برای دیگران. [سفید روی آبی] mh(هیچ) فایل با چندین پیوند سخت (hard link). تنها لازم است متغیرهایی را که میخواهید نسبت به مقدار پیشفرض تغییر دهید، اضافه کنید.
فرم دوم،
"*ext=value"نام فایلها را بر اساس پسوند رنگآمیزی میکند. برای نمونه، با استفاده از کدهای ISO 6429، جهت آبی کردن رنگ همه فایلهای منبع زبان C عبارت"*.c=34"را مشخص میکنید. این کار رنگ تمام فایلهای ختمشده به ‘.c’ را به رنگ پیشزمینه آبی (34) تغییر میدهد.نویسههای کنترلی را میتوان در نمادگذاری گریز سبک C (C-style-escaped) یا نمادگذاری ^ مشابه stty نوشت. نمادگذاری سبک C عبارت ‘
^[’ را برای Escape، ‘_’ را برای نویسه فاصله معمولی، و ‘?’ را برای Delete میافزاید. علاوه بر این، نویسه گریز ‘^[’ میتواند برای لغو تفسیر پیشفرض ‘^[ ،’ ‘^ ،’ ‘:’ و ‘=’ استفاده شود.هر نام فایل به صورت زیر در ترمینال خروجی داده خواهد شد:
lc color-codercfilenameecاگر کد ‘
ec’ تعریف نشده باشد، دنبالهبه جای آن استفاده خواهد شد. این روش معمولاً برای استفاده راحتتر است، اما عمومیت کمتری دارد.lc no rcکد چپ (‘
lc ،’) کد راست (‘rc’) و کدهای پایان (‘ec’) فراهم شدهاند تا نیازی نباشد بخشهای مشترک را بارها و بارها تایپ کنید و همچنین برای پشتیبانی از پایانههای نامتعارف؛ عموماً نیازی به تغییر دادن آنها نخواهید داشت مگر اینکه پایانه شما از کدهای رنگ ISO 6429 استفاده نکرده و از سیستم دیگری استفاده کند.اگر پایانه شما از کدهای رنگ ISO 6429 استفاده میکند، میتوانید کدهای نوع (یعنی همه به جز کدهای ‘
lc ،’ ‘rc’ و ‘ec’) را از کدهای عددی رنگ ISO 6429 که با ‘;’ از هم جدا شدهاند، ترکیب کنید. برای مثال، ‘01;32’ رنگ پیشزمینه سبز روشن با پسزمینه پیشفرض است.رایجترین کدهای رنگ ISO 6429 عبارتند از:
- Color
- Description
0- برای بازیابی رنگ پیشفرض.
1- رنگهای پررنگ (Bold) / روشنتر.
4- متن دارای زیرخط (Underline).
5- متن چشمکزن.
30- پیشزمینه سیاه.
31- پیشزمینه قرمز.
32- پیشزمینه سبز.
33- پیشزمینه زرد (یا قهوهای).
34- پیشزمینه آبی.
35- پیشزمینه سرخابی (magenta).
36- پیشزمینه فیروزهای (cyan).
37- پیشزمینه سفید (یا خاکستری).
40- پسزمینه سیاه.
41- پسزمینه قرمز.
42- پسزمینه سبز.
43- پسزمینه زرد (یا قهوهای).
44- پسزمینه آبی.
45- پسزمینه سرخابی (magenta).
46- پسزمینه فیروزهای (cyan).
47- پسزمینه سفید (یا خاکستری).
تمام کدهای رنگ ISO 6429 روی همهٔ سیستمها یا دستگاههای نمایش کار نخواهند کرد.
برخی از برنامههای ترمینال کد پایانی پیشفرض را بهدرستی تشخیص نمیدهند. اگر پس از گرفتن فهرست دایرکتوری تمام متنها رنگی شدند، سعی کنید کدهای ‘
no’ و ‘fi’ را از 0 به کدهای عددی مربوط به رنگهای استاندارد پیشزمینه و پسزمینهٔ خود تغییر دهید.برای پیوندهای نمادین، کلیدواژهٔ ‘
ln’ میتواند روی ‘target’ تنظیم شود، که باعث میشود رنگ فایل با رنگ مقصد پیوند یکسان شود. MACHTYPE(+)- نوع ماشین (کلاس ریزپردازنده یا مدل ماشین)، همانطور که در زمان کامپایل مشخص شده است.
NOREBIND(+)- در صورت
تنظیم،
نویسههای
قابلچاپ
مجدداً به
self-insert-commandمقید نمیشوند. ببینید Native Language System support (+). OSTYPE(+)- سیستمعامل، همانطور که در زمان کامپایل مشخص شده است.
PATH- یک فهرست از
دایرکتوریهای
جداشده با
‘
:’ برای جستجوی فایلهای اجرایی. معادل متغیر شلpathاست، اما با قالبی متفاوت. PWD(+)- معادل
متغیر شل
cwdاست، اما با آن همگامسازی نشده است؛ تنها پس از یک تغییر دایرکتوری واقعی بهروزرسانی میشود. REMOTEHOST(+)- میزبانی که
کاربر از
راه دور از
طریق آن
وارد سیستم
شده است، در
صورتی که
چنین باشد و
شل قادر به
تشخیص آن
باشد. تنها
در صورتی
تنظیم
میشود که
شل به این
صورت
کامپایل
شده باشد؛
متغیر شل
versionرا ببینید. SHLVL(+)- معادل با
متغیر
پوستهای
shlvlاست. SYSTYPE(+)- نوع سیستم فعلی. (فقط در Domain/OS)
TERM- معادل با
متغیر
پوستهای
termاست. TERMCAP- رشتهٔ قابلیتهای ترمینال. نگاه کنید به Terminal management (+).
USER- معادل با
متغیر
پوستهای
userاست. VENDOR(+)- فروشنده یا سازنده، همانگونه که در زمان کامپایل تعیین شده است.
VISUAL- مسیر کامل
ویرایشگر
تمامصفحهٔ
پیشفرض.
توسط دستور
ویرایشگر
run-fg-editorاستفاده میشود اگر متغیر پوستهایeditorsتنظیم نشده باشد. همچنین متغیر محیطیEDITORرا نیز ببینید.
فایلها (FILES)
- /etc/csh.cshrc
- ابتدا توسط
هر پوسته
خوانده
میشود.
سیستمهای ConvexOS، Stellix و Intel از /etc/cshrc استفاده میکنند.
سیستمهای NeXT از /etc/cshrc.std استفاده میکنند.
سیستمهای A/UX، AMIX، Cray و IRIX معادل این فایل را در csh(1) ندارند، اما با این وجود این فایل را در
tcshمیخوانند.Solaris 2.x نیز فاقد آن است، اما
tcshفایل /etc/.cshrc را میخواند.(+)
- /etc/csh.login
- توسط
شلهای
لاگین پس از
/etc/csh.cshrc
خوانده
میشود.
سیستمهای ConvexOS، Stellix و Intel از /etc/login استفاده میکنند.
سیستمهای NeXT از /etc/login.std استفاده میکنند.
Solaris 2.x از /etc/.login استفاده میکند.
سیستمهای A/UX، AMIX، Cray و IRIX از /etc/cshrc استفاده میکنند.
- ~/.tcshrc (+)
- توسط هر شل پس از /etc/csh.cshrc یا معادل آن خوانده میشود.
- ~/.cshrc
- توسط هر شل،
در صورتی که
~/.tcshrc وجود
نداشته
باشد، پس از
/etc/csh.cshrc یا
معادل آن
خوانده
میشود.
در این راهنما عبارت ‘~/.tcshrc’ به معنای “~/.tcshrc یا در صورت پیدا نشدن ~/.tcshrc ، فایل ~/.cshrc” بهکار رفته است.
- ~/.history
- توسط
شلهای
ورود پس از
~/.tcshrc
خوانده
میشود اگر
savehistتنظیم شده باشد، اما همچنین بهhistfileنگاه کنید. - ~/.login
- توسط
شلهای
ورود پس از
~/.tcshrc یا
~/.history
خوانده
میشود.
ممکن است شل به گونهای کامپایل شده باشد که ~/.login را به جای بعد از آن، قبل از ~/.tcshrc و ~/.history بخواند؛ به متغیر شل
versionنگاه کنید. - ~/.cshdirs (+)
- توسط
شلهای
ورود پس از
~/.login
خوانده
میشود اگر
savedirsتنظیم شده باشد، اما همچنین بهdirsfileنگاه کنید. - /etc/csh.logout
- توسط
شلهای
ورود هنگام
خروج
خوانده
میشود.
سیستمهای ConvexOS، Stellix و Intel از /etc/logout استفاده میکنند. سیستمهای NeXT از /etc/logout.std استفاده میکنند.
سیستمهای A/UX، AMIX، Cray و IRIX معادلی در csh(1) ندارند، اما در هر صورت این فایل را در
tcshمیخوانند.سیستمهای Solaris 2.x نیز آن را ندارند، اما
tcshفایل /etc/.logout را میخواند. (+) - ~/.logout
- توسط شلهای ورود به سیستم (login shells) در هنگام خروج پس از /etc/csh.logout یا معادل آن خوانده میشود.
- /bin/sh
- برای تفسیر
اسکریپتهای
شلی که با
‘
#’ شروع نمیشوند استفاده میشود. - /tmp/sh*
- فایل موقت
برای
‘
<<’. - /etc/passwd
- منبع دایرکتوریهای خانگی برای جایگزینیهای ‘~name’.
اگر شل به
این صورت
کامپایل
شده باشد،
ترتیب
خوانده شدن
فایلهای
راهاندازی
ممکن است
تفاوت
داشته
باشد؛ بخش
Startup and shutdown و
متغیر شل
version را
ببینید.
ویژگیهای جدید (+) (NEW FEATURES)
این
راهنما
tcsh را به
عنوان یک
موجودیت
واحد توصیف
میکند،
اما
کاربران
باتجربهٔ
csh(1)
مایل
خواهند بود
توجه
ویژهای به
ویژگیهای
جدید tcsh
داشته
باشند.
یک ویرایشگر خط فرمان، که از نگاشتهای کلید به سبک emacs(1) یا به سبک vi(1) پشتیبانی میکند. رجوع کنید به ویرایشگر خط فرمان (+) و دستورهای ویرایشگر (+).
تکمیل
کلمات و
فهرستبندی
تعاملی و
برنامهپذیر.
رجوع کنید
به
تکمیل
و
فهرستبندی
(+) و
دستورهای
توکار complete
و uncomplete.
تصحیح املا (+) برای نام فایلها، دستورها و متغیرها.
دستورهای
ویرایشگر (+)
که
عملکردهای
مفید دیگری
را در میان
دستورهای
تایپشده
انجام
میدهند،
از جمله
جستجوی
مستندات
(run-help),
راهاندازی
سریع
ویرایشگر
(run-fg-editor), و
شناسایی
دستور
(which-command).
یک
سازوکار
تاریخچهٔ
ارتقایافته.
رویدادها
در فهرست
تاریخچه
دارای
برچسب
زمانی
هستند.
همچنین
رجوع کنید
به دستور
history و
متغیرهای
پوستهٔ
مرتبط با
آن،
مشخصکنندهٔ
رویداد
‘#’ که
پیشتر
مستند نشده
بود و
اصلاحکنندههای
جدید در
جایگزینی
تاریخچه,
دستورهای
ویرایشگر
down-history,
expand-history,
history-search-backward,
history-search-forward,
i-search-back, i-search-fwd,
toggle-literal-history,
vi-search-back,
vi-search-fwd, و
up-history و
متغیر
پوستهٔ
histlit.
تجزیه
بهبودیافته
دایرکتوری
و مدیریت
پشته
دایرکتوری.
دستورهای
cd, pushd,
popd, و dirs و
متغیرهای
شل وابسته
به آنها،
شرح
جایگزینی
پشته
دایرکتوری (+)
(Directory stack substitution (+)),
متغیرهای
شل dirstack,
owd, و symlinks
و دستورهای
ویرایشگر
normalize-command و
normalize-path را
ببینید.
نفی در الگوهای glob. نگاه کنید به جایگزینی نام فایل (Filename substitution).
عملگرهای
پرسوجوی
فایل (File inquiry operators)
جدید و یک
دستور
توکار filetest
که از آنها
استفاده
میکند.
طیف متنوعی از رویدادهای خودکار، دورهای و زمانبندیشده (+) (Automatic, periodic and timed events (+)) شامل رویدادهای زمانبندیشده، نامهای مستعار ویژه، خروج خودکار از سیستم و قفل کردن ترمینال، زمانسنجی دستورها و نظارت بر ورود و خروجها.
پشتیبانی
از سیستم
زبان بومی
(نگاه کنید
به
پشتیبانی
از سیستم
زبان بومی (+)
(Native Language System support (+))),
ویژگیهای
نگارشهای
مختلف
سیستمعامل
(نگاه کنید
به
پشتیبانی
از
نگارشهای
مختلف
سیستمعامل
(+) (OS variant support (+)) و
متغیر شل
echo_style) و
مکانهای
فایل
وابسته به
سیستم (نگاه
کنید به
فایلها
(FILES)).
قابلیتهای گسترده در مدیریت ترمینال. رجوع کنید به Terminal management (+).
دستورهای
توکار جدید
شامل builtins,
hup, ls-F,
newgrp, printenv,
which, و where.
متغیرهای
جدیدی که
اطلاعات
مفیدی را
بهآسانی
در دسترس
پوسته قرار
میدهند.
رجوع کنید
به
متغیرهای
پوستهٔ
gid, loginsh,
oid, shlvl,
tcsh, tty,
uid, و version
و متغیرهای
محیطی HOST,
REMOTEHOST, VENDOR,
OSTYPE, و
MACHTYPE.
سینتکس
جدیدی برای
گنجاندن
اطلاعات
مفید در
رشتهٔ
اعلان (رجوع
کنید به
prompt), و
اعلانهای
ویژه برای
حلقهها و
تصحیح املا
(رجوع کنید
به prompt2 و
prompt3).
متغیرهای فقطخواندنی. رجوع کنید به Variable substitution.
حرف T در TCSH (THE T IN TCSH)
در سال ۱۹۶۴، DEC رایانه PDP-6 را تولید کرد. مدل PDP-10 بازپیادهسازی بعدی آن بود. در حدود سال ۱۹۷۰، هنگامی که DEC مدل دوم یعنی KI10 را عرضه کرد، نام آن به DECsystem-10 تغییر یافت.
سیستمعامل TENEX در سال ۱۹۷۲ در Bolt, Beranek & Newman (یک اتاق فکر در کمبریج، ماساچوست) به عنوان آزمایشی در زمینهٔ سیستمهای عامل حافظه مجازی با صفحهبندی بر حسب تقاضا (demand-paged) ایجاد شد. آنها یک پیجر (pager) جدید برای DEC PDP-10 ساختند و سیستمعامل هماهنگ با آن را ایجاد کردند. این سیستم در محافل دانشگاهی بسیار موفق بود.
در سال ۱۹۷۵، شرکت DEC مدل جدیدی از PDP-10 با نام KL10 را عرضه کرد؛ آنها قصد داشتند تنها یک نسخه از TENEX را که مجوز آن را از BBN گرفته بودند، برای این دستگاه جدید ارائه دهند. آنها نسخهٔ خود را TOPS-20 نامیدند (بزرگنویسی حروف آن نشان تجاری ثبتشده است). بسیاری از کاربران TOPS-10 («The OPerating System for PDP-10») اعتراض کردند؛ بنابراین DEC خود را در حال پشتیبانی از دو سیستم ناسازگار بر روی یک سختافزار یکسان دید--اما در مورد PDP-11، شش سیستمعامل وجود داشت!
سیستمهای TENEX، و TOPS-20 تا نسخهٔ ۳، قابلیت تکمیل دستور را از طریق یک کتابخانهٔ زیرروال در سطح کد کاربر به نام ULTCMD ارائه میدادند. با نسخهٔ ۳، شرکت DEC تمام آن قابلیتها و حتی بیشتر را به مانیتور («هسته» برای شما یونیکسیها) منتقل کرد که از طریق COMND% JSYS (دستور «Jump to SYStem»، سازوکار فراخوانی سرپرست [آیا ریشههای آیبیام من نیز دارند خود را نشان میدهند؟]) قابل دسترسی بود.
سازندهٔ tcsh تحت تأثیر این ویژگی و چندین ویژگی دیگر TENEX و TOPS-20 قرار گرفت و نسخهای از csh ایجاد کرد که از آنها تقلید میکرد.
محدودیتها (LIMITATIONS)
سیستم فهرست آرگومانها را به ARG_MAX نویسه محدود میکند.
تعداد آرگومانهای یک دستور که شامل بسط نام فایل است، به ۱/۶ تعداد نویسههای مجاز در یک فهرست آرگومان محدود میشود.
جایگزینیهای دستور نمیتوانند نویسههایی بیش از آنچه در یک فهرست آرگومان مجاز است، جایگزین کنند.
برای
تشخیص
حلقه، شل
تعداد
جایگزینیهای
alias در یک
خط واحد را
به ۲۰ محدود
میکند.
همچنین ببینید (SEE ALSO)
csh(1), dircolors(1), emacs(1), ls(1), newgrp(1), setpath(1), sh(1), stty(1), su(1), tset(1), vi(1), x(1), access(2), execve(2), fork(2), killpg(2), pipe(2), setrlimit(2), sigvec(2), stat(2), umask(2), vfork(2), wait(2), malloc(3), setlocale(3), tty(4), a.out(5), termcap(5), environ(7), termio(7), Introduction to the C Shell
نسخه (VERSION)
این کتابچه راهنما tcsh 6.24.16 (Astron) 2025-07-09 را مستند میکند.
نویسندگان (AUTHORS)
- William Joy.
-
نویسنده اصلی csh(1). - J.E. Kulp,
- IIASA،
لاکسنبرگ،
اتریش.
ویژگیهای کنترل کار و پشته دایرکتوری. - Ken Greer,
- HP Labs، 1981.
تکمیل نام فایل. - Mike Ellis,
- Fairchild، 1983.
تشخیص/تکمیل نام دستور. - Paul Placeway,
- دپارتمان CIS
دانشگاه
ایالتی
اوهایو، 1983-1993.
ویرایشگر خط فرمان، روالهای اعلان، نحو جدید glob و اصلاحات و بهینهسازیهای متعدد. - Karl Kleinpaste,
- CCI، 1983-4.
نامهای مستعار ویژه، سازوکارهای استخراج پشته دایرکتوری، نظارت بر ورود/خروج، رویدادهای زمانبندیشده، و ایدهٔ قالب جدید اعلان. - Rayan Zachariassen,
- دانشگاه
تورنتو، 1984.
دستورهای توکارls-Fوwhichو رفع اشکالات، تغییرات و بهینهسازیهای متعدد. - Chris Kingsley,
- Caltech.
روالهای سریع تخصیص حافظه. - Chris Grevstad,
- TRW, 1987.
ادغام 4.3BSD csh(1) درtcsh. - Christos S. Zoulas,
- Cornell U. EE Dept., 1987-94.
پورتها به HPUX، SVR2 و SVR3، نسخهای از getwd.c برای SysV، پشتیبانی از SHORT_STRINGS و نسخه جدیدی از sh.glob.c. - James J Dempsey,
- BBN و Paul Placeway, OSU, 1988.
پورت A/UX. - Daniel Long,
- NNSC, 1988.
wordchars. - Patrick Wolfe,
- Kuck and Associates, Inc., 1988.
پاکسازی حالتvi. - David C Lawrence,
- Rensselaer Polytechnic Institute, 1989.
autolistو فهرستبندی تکمیلهای مبهم. - Alec Wolman,
- DEC, 1989.
خطوط جدید در اعلان. - Matt Landau,
- BBN, 1989.
~/.tcshrc. - Ray Moody,
- دانشکده
فیزیک Purdue،
۱۹۸۹.
بسط تاریخچه با کلید فاصلهٔ جادویی. - Mordechai ????,
- Intel، ۱۹۸۹.
رفع اشکالات و افزودههایprintprompt(). - Kazuhiro Honda,
- دانشکده
علوم
کامپیوتر،
دانشگاه Keio،
۱۹۸۹.
تصحیح خودکار املا وprompt3. - Per Hedeland,
- Ellemtel، سوئد،
۱۹۹۰-.
رفع اشکالات گوناگون، بهبودها و بهروزرسانیهای راهنما. - Hans J. Albertsson,
- Sun سوئد.
ampm,settc, وtelltc. - Michael Bloom.
-
رفع اشکالات مدیریت وقفه. - Michael Fine,
- Digital Equipment Corp.
پشتیبانی از کلیدهای گسترشیافته. - Eric Schnoebelen,
- Convex، ۱۹۹۰.
پشتیبانی از Convex، رفع اشکالات فراوان در csh(1) و ذخیره و بازیابی پشتهٔ دایرکتوری. - Ron Flax,
- Apple، ۱۹۹۰.
پورت (مجدد) برای A/UX 2.0. - Dan Oscarsson,
- LTH سوئد،
۱۹۹۰.
پشتیبانی از NLS و شبیهسازی پشتیبانی NLS برای سیستمهای فاقد NLS، رفع اشکالها. - Johan Widen,
- SICS سوئد،
۱۹۹۰.
shlvl, پشتیبانی از Mach،correct-line, چاپ ۸-بیتی. - Matt Day,
- Sanyo Icon، ۱۹۹۰.
پشتیبانی از termio در POSIX، رفع اشکالات محدودیتهای SysV. - Jaap Vermeulen,
- Sequent، ۱۹۹۰-۹۱.
رفع اشکالات حالت Vi، expand-line، رفع اشکالات تغییر پنجره، پورت به Symmetry. - Martin Boyer,
- Institut de recherche d'Hydro-Quebec،
۱۹۹۱.
autolistو گزینههای بوق آن، اصلاح جستجوی تاریخچه جهت جستجوی کل رشته از ابتدای خط تا مکاننما. - Scott Krotz,
- Motorola، ۱۹۹۱.
پورت به Minix. - David Dawes,
- دانشگاه
سیدنی
استرالیا،
گروه
فیزیک،
۱۹۹۱.
رفع اشکالات کنترل کار در SVR4. - Kimmo Suominen,
- 1991-.
رفع اشکالات گوناگون قابلیت حمل و موارد دیگر. افزودن ‘$''’ (علامت دلار و نقلقول تکی). - Jose Sousa,
- Interactive Systems Corp.، ۱۹۹۱.
رفع اشکالات گستردهٔviو دستور حذف درvi. - Marc Horowitz,
- MIT, 1991.
اصلاحات سازگاری با ANSI، کد درهمسازی جدید exec، اصلاحات imake،where. - Luke Mewburn,
- 1991-.
بهبود چاپ دایرکتوری درprompt. افزودنellipsisوrprompt. بهبودهایvimode. بهبودهای صفحهٔ راهنما. - Bruce Sterling Woodcock,
- sterling@netcom.com, 1991-1995.
پورت ETA و Pyramid، اصلاحات Makefile و lint، افزودنignoreeof=n و تغییرات گوناگون دیگر برای قابلیت حمل و رفع اشکالات. - Jeff Fink,
- 1992.
complete-word-fwdوcomplete-word-back. - Harry C. Pulley,
- 1992.
پورت Coherent. - Andy Phillips,
- Mullard Space Science Lab U.K., 1992.
پورت VMS-POSIX. - Beto Appleton,
- IBM Corp., 1992.
اصلاحات پیمایش گروه فرایند، رفع اشکالات csh(1), آزمونهای فایل POSIX، POSIX SIGHUP. - Scott Bolte,
- Cray Computer Corp., 1992.
پورت CSOS. - Kaveh R. Ghazi,
- Rutgers University, 1992.
پورتها و رفع اشکالات Tek، m88k، Titan و Masscomp. افزودن پشتیبانی از autoconf. - Mark Linderman,
- Cornell University, 1992.
پورت OS/2. - Mika Liljeberg,
- liljeber@kruuna.Helsinki.FI, 1992.
پورت Linux. - Tim P. Starrin,
- NASA Langley Research Center Operations, 1993.
متغیرهای فقطخواندنی. - Dave Schweisguth,
- Yale University, 1993-4.
صفحهٔ man جدید و tcsh.man2html. - Larry Schwimmer,
- Stanford University, 1993.
وصلههای AFS و HESIOD. - Edward Hutchins,
- Silicon Graphics Inc., 1996.
افزودن cd ضمنی. - Martin Kraemer,
- 1997.
پورت به ماشین Siemens Nixdorf EBCDIC. - Amol Deshpande,
- Microsoft, 1997.
پورت به WIN32 (شامل Windows/95 و Windows/NT)؛ نوشتن تمام کدهای ناموجود کتابخانه و کاتالوگ پیام جهت برقراری ارتباط با Windows. - Taga Nayuta,
- 1998.
افزودههای مربوط به ls رنگی.
تشکر و قدردانی (THANKS TO)
Bryan Dunlap, Clayton Elwell, Karl Kleinpaste, Bob Manson, Steve Romig, Diana Smetters, Bob Sutterfield, Mark Verber, Elizabeth Zwicky و همه افراد دیگر در Ohio State برای پیشنهادات و دلگرمیهایشان
همه افراد در شبکه، برای شکیبایی، گزارش اشکالات، و پیشنهاد افزودههای جدید برای تکتک نسخهها
Richard M. Alderson III، برای نگارش بخش T in tcsh
اشکالات (BUGS)
هنگامی که یک دستور معلقشده مجدداً راهاندازی میشود، اگر دایرکتوری آغاز به کار آن با دایرکتوری فعلی متفاوت باشد، پوسته آن دایرکتوری را چاپ میکند. این امر میتواند گمراهکننده (یعنی نادرست) باشد، چرا که ممکن است کار بهصورت درونی دایرکتوری را تغییر داده باشد.
توابع درونی پوسته قابل توقف/راهاندازی مجدد نیستند. توالی دستورها به شکل
a ; b ; cb’,
دستوری که
پوسته
بلافاصله
پس از آن
اجرا خواهد
کرد عبارت
است از
‘c’. این
موضوع
بهویژه
زمانی
محسوس است
که این بسط
ناشی باشد
از یک alias.
کافی است
توالی
دستورها در
‘()’ها
قرار گیرد
تا به یک
زیرپوسته
تحمیل شود،
یعنی:
( a ; b ; c )کنترل بر روی خروجی tty پس از آغاز فرایندها ابتدایی است؛ شاید این موضوع الهامبخش کسی شود تا روی یک رابط ترمینال مجازی مناسب کار کند. در یک رابط ترمینال مجازی میتوان کارهای بسیار جذابتری با کنترل خروجی انجام داد.
جایگزینی alias اغلب برای شبیهسازی ناشیانهٔ رویههای پوسته به کار میرود؛ باید به جای aliasها، رویههای پوسته فراهم شوند.
ساختارهای
کنترلی
باید به جای
شناختهشدن
به عنوان
دستورهای
داخلی،
تجزیه شوند.
این امر
اجازه
میدهد
دستورهای
کنترلی در
هر جایی
قرار
گیرند، با
‘|’,
ترکیب شوند
و با
فرانحوهای
‘&’ و
‘;’ به
کار روند.
foreach
هنگام
جستوجو
برای end
خود، here documentها
را نادیده
نمیگیرد.
باید
امکان
استفاده از
اصلاحکنندههای
‘:’ روی
خروجی
جایگزینیهای
دستور وجود
داشته
باشد.
بهروزرسانی
صفحه برای
خطوط
طولانیتر
از عرض صفحه
بسیار ضعیف
است اگر
پایانه
نتواند
مکاننما
را به سمت
بالا حرکت
دهد (یعنی
نوع پایانه
‘dumb’).
HPATH و
NOREBIND نیازی
نیست
متغیرهای
محیطی
باشند.
الگوهای glob
که از ‘?’,
‘*’, یا
‘[]’,
استفاده
نمیکنند،
یا آنهایی
که از ‘{}’
یا ‘~’
استفاده
میکنند،
به درستی
نقیض
نمیشوند.
شکل
تکدستوری
if حتی اگر
عبارت
نادرست
باشد و
دستور اجرا
نشود،
تغییر مسیر
خروجی را
انجام
میدهد.
ls-F
هنگام
مرتبسازی
نام
فایلها،
نویسههای
شناسایی
فایل را
لحاظ
میکند و
نویسههای
کنترلی در
نام
فایلها را
بهخوبی
مدیریت
نمیکند.
نمیتوان
در اجرای آن
وقفه ایجاد
کرد.
جایگزینی
دستور از
چندین
دستور و شرط
پشتیبانی
میکند،
اما نه از
حلقهها یا
gotoهای رو
به عقب.
اشکالات را ترجیحاً همراه با اصلاحات در https://bugs.astron.com گزارش دهید. اگر میخواهید در نگهداری و آزمایش tcsh کمک کنید، خود را به فهرست پستی در https://mailman.astron.com/mailman/listinfo/tcsh اضافه کنید.
| July 9, 2025 | Astron 6.24.16 |