| ZSHMODULES(1) | General Commands Manual | ZSHMODULES(1) |
نام (NAME)
zshmodules - ماژولهای بارگذاریپذیر پوسته زد (zsh)
توضیحات (DESCRIPTION)
برخی از بخشهای اختیاری zsh به صورت ماژولهایی جدا از هسته پوسته قرار دارند. هر یک از این ماژولها را میتوان در زمان ساخت به پوسته پیوند داد، یا در صورتی که پیکربندی نصب از این قابلیت پشتیبانی کند، در حین اجرای پوسته به صورت پویا متصل کرد. ماژولها در زمان اجرا با استفاده از دستور zmodload پیوند داده میشوند، راهنمای zshbuiltins(1) را ببینید.
ماژولهایی که همراه با توزیع zsh عرضه میشوند عبارتند از:
- zsh/attr
- دستورات توکار برای دستکاری صفات گسترشیافته (xattr).
- zsh/cap
- دستورات توکار برای کار با مجموعههای قابلیتهای (دسترسیهای) POSIX.1e (POSIX.6).
- zsh/clone
- یک دستور توکار که میتواند یک نمونه شبیهسازیشده از پوسته در حال اجرا را به ترمینال دیگری متصل کند.
- zsh/compctl
- دستور توکار compctl برای کنترل کاملسازی.
- zsh/complete
- کد پایه و اصلی کاملسازی.
- zsh/complist
- افزونههای فهرست کردن گزینههای کاملسازی.
- zsh/computil
- ماژولی حاوی دستورات توکار کمکی مورد نیاز سیستم کاملسازی مبتنی بر توابع پوسته.
- zsh/curses
- دستورات مدیریت پنجره curses
- zsh/datetime
- تعدادی دستور و پارامتر مربوط به تاریخ و زمان.
- zsh/db/gdbm
- دستورات توکار برای مدیریت پارامترهای آرایه انجمنی متصل به پایگاههای داده GDBM.
- zsh/deltochar
- یک تابع ZLE که معادل عملکرد zap-to-char در ویرایشگر EMACS است.
- zsh/example
- یک نمونه از نحوه نوشتن ماژول.
- zsh/files
- برخی دستورات پایه برای دستکاری فایل به صورت دستور توکار.
- zsh/langinfo
- رابط دسترسی به اطلاعات محلیسازی (locale).
- zsh/mapfile
- دسترسی به فایلهای خارجی از طریق یک آرایه انجمنی ویژه.
- zsh/mathfunc
- توابع علمی استاندارد برای استفاده در ارزیابیهای ریاضی.
- zsh/nearcolor
- نگاشت رنگها به نزدیکترین رنگ در پالت رنگ موجود.
- zsh/newuser
- آمادهسازی شرایط برای نصب فایلهای پیکربندی کاربران جدید.
- zsh/parameter
- دسترسی به جدولهای درهمسازی درونی از طریق آرایههای انجمنی ویژه.
- zsh/pcre
- رابط اتصال به کتابخانه عبارات منظم PCRE.
- zsh/param/private
- دستورات توکار برای مدیریت پارامترهای با حوزه خصوصی در بستر توابع.
- zsh/regex
- رابط اتصال به کتابخانه عبارات منظم POSIX.
- zsh/sched
- یک دستور توکار که امکان اجرای زمانبندیشده دستورها را در پوسته فراهم میکند.
- zsh/net/socket
- کار با سوکتهای دامنه یونیکس
- zsh/stat
- رابط یک دستور توکار برای فراخوانی سیستمی stat.
- zsh/system
- یک رابط توکار برای دسترسی به ویژگیهای سطح پایین گوناگون سیستم.
- zsh/net/tcp
- کار با سوکتهای TCP
- zsh/termcap
- رابط کار با پایگاهداده termcap.
- zsh/terminfo
- رابط کار با پایگاهداده terminfo.
- zsh/watch
- گزارش رویدادهای ورود و خروج کاربران از سیستم.
- zsh/zftp
- یک کلاینت توکار FTP.
- zsh/zle
- ویرایشگر خط فرمان Zsh، شامل دستورات توکار bindkey و vared.
- zsh/zleparameter
- دسترسی به بخشهای درونی ویرایشگر خط Zsh از طریق پارامترها.
- zsh/zprof
- ماژولی برای پروفایلسازی و تحلیل کارایی توابع پوسته.
- zsh/zpty
- یک دستور توکار برای راهاندازی یک دستور در یک شبهترمینال.
- zsh/zselect
- مسدود کردن اجرا و بازگشت هنگام آماده شدن توصیفکنندههای فایل.
- zsh/zutil
- تعدادی دستور توکار کمکی، برای نمونه ابزار پشتیبانی از پیکربندی از طریق سبکها (styles).
ماژول ZSH/ATTR (THE ZSH/ATTR MODULE)
ماژول zsh/attr برای دستکاری و مدیریت صفات گسترشیافته به کار میرود. گزینه -h باعث میشود تمام دستورها به جای اهداف پیوندها، روی پیوندهای نمادین اعمال شوند. دستورات توکار موجود در این ماژول عبارتند از:
- zgetattr [ -h ] filename attribute [ parameter ]
- صفت گسترشیافته attribute را از filename مشخصشده دریافت میکند. در صورتی که آرگومان اختیاری parameter داده شود، صفت در آن پارامتر مقداردهی میشود و در خروجی استاندارد چاپ نخواهد شد.
- zsetattr [ -h ] filename attribute value
- صفت گسترشیافته attribute را روی filename مشخصشده به مقدار value تنظیم میکند.
- zdelattr [ -h ] filename attribute
- صفت گسترشیافته attribute را از filename مشخصشده حذف میکند.
- zlistattr [ -h ] filename [ parameter ]
- فهرست صفات گسترشیافته تنظیمشده فعلی روی filename مشخصشده را نمایش میدهد. در صورتی که آرگومان اختیاری parameter داده شود، فهرست صفات در آن پارامتر ذخیره شده و به جای آن در خروجی استاندارد چاپ نخواهد شد.
دستورات zgetattr و zlistattr حافظه را به صورت پویا تخصیص میدهند. اگر صفت یا فهرست صفات در فاصله بین تخصیص حافظه و فراخوانی دریافت آنها افزایش یابد، مقدار 2 را بازمیگردانند. در سایر خطاها، مقدار 1 بازگردانده میشود. این سازوکار به تابع فراخوان امکان میدهد این وضعیت را بررسی کرده و دوباره تلاش کند.
ماژول ZSH/CAP (THE ZSH/CAP MODULE)
ماژول zsh/cap برای دستکاری مجموعههای قابلیتهای POSIX.1e (POSIX.6) به کار میرود. چنانچه سیستمعامل از این رابط پشتیبانی نکند، دستورات توکار تعریفشده توسط این ماژول هیچ کاری انجام نمیدهند. دستورات توکار این ماژول عبارتند از:
- cap [ capabilities ]
- مجموعه قابلیتهای پردازش پوسته را به capabilities مشخصشده تغییر میدهد، در غیر این صورت قابلیتهای جاری پوسته را نمایش میدهد.
- getcap filename ...
- این یک پیادهسازی درونی (توکار) از ابزار استاندارد POSIX است. مجموعههای قابلیت را روی هر filename مشخصشده نمایش میدهد.
- setcap capabilities filename ...
- این یک پیادهسازی درونی از ابزار استاندارد POSIX است. مجموعههای قابلیت را روی هر filename مشخصشده به capabilities دادهشده تنظیم میکند.
ماژول ZSH/CLONE (THE ZSH/CLONE MODULE)
ماژول zsh/clone یک دستور توکار در دسترس قرار میدهد:
- clone tty
- یک نمونه منشعبشده (forked) از پوسته فعلی ایجاد میکند که به tty مشخصشده متصل است. در پوسته جدید، پارامترهای ویژه PID، PPID و TTY به شکل مناسب تغییر میکنند. مقدار $! در پوسته جدید برابر صفر، و در پوسته اصلی برابر با PID پوسته جدید تنظیم میشود.
وضعیت خروجی این دستور توکار در هر دو پوسته در صورت موفقیت برابر صفر، و در صورت بروز خطا غیر صفر است.
مقصد clone باید یک ترمینال بلااستفاده باشد، مانند یک کنسول مجازی بدون استفاده یا یک ترمینال مجازی که توسط دستور زیر ایجاد شده است:
xterm -e sh -c 'trap : INT QUIT TSTP; tty;
while :; do sleep 100000000; done'
توضیحاتی درباره این خط فرمان طولانی xterm لازم است: هنگام شبیهسازی روی یک شبهترمینال، نشست دیگری («نشست» در مفهوم گروه نشست یونیکس یا SID) پیشتر مالکیت ترمینال را در اختیار دارد. بنابراین zsh شبیهسازیشده نمیتواند شبهترمینال را به عنوان tty کنترلکننده تصاحب کند. این موضوع متضمن دو نکته است:
- •
- سیگنالهای کنترل شغل (job control) به گروه پردازش sh-started-by-xterm ارسال خواهند شد (به همین دلیل سیگنالهای INT، QUIT و TSTP را با trap غیرفعال میکنیم؛ در غیر این صورت حلقه while ممکن است متوقف یا کشته شود)
- •
- در پوسته شبیهسازیشده کنترل شغل غیرفعال خواهد بود و کلیدهای کنترل شغل (شامل control-C، control-\ و control-Z) کار نخواهند کرد.
این موضوع در زمان شبیهسازی روی یک vc استفادهنشده صدق نمیکند.
شبیهسازی روی ترمینالِ در حال استفاده (و آمادهنشده) باعث میشود دو پردازش به طور همزمان از یک ترمینال بخوانند و بایتهای ورودی به صورت تصادفی به هر یک از دو پردازش برسد.
دستور clone بیشتر به عنوان یک جایگزین توکار پوسته برای openvt مفید است.
ماژول ZSH/COMPCTL (THE ZSH/COMPCTL MODULE)
ماژول zsh/compctl دو دستور توکار را فراهم میکند. دستور compctl، روش قدیمی و منسوخشده برای کنترل کاملسازیها در ZLE است. به zshcompctl(1) مراجعه کنید. دستور توکار دیگر، compcall، میتواند در ویجتهای کاملسازی تعریفشده توسط کاربر به کار رود، راهنمای zshcompwid(1) را ببینید.
ماژول ZSH/COMPLETE (THE ZSH/COMPLETE MODULE)
ماژول zsh/complete چندین دستور توکار در دسترس قرار میدهد که میتوانند در ویجتهای کاملسازی تعریفشده توسط کاربر استفاده شوند، راهنمای zshcompwid(1) را ببینید.
ماژول ZSH/COMPLIST (THE ZSH/COMPLIST MODULE)
ماژول zsh/complist سه قابلیت تکمیلی برای فهرستهای کاملسازی ارائه میدهد: امکان برجستهسازی و رنگآمیزی موارد تطبیقیافته در فهرست، امکان پیمایش (اسکرول) در فهرستهای طولانی، و سبک متفاوتی از کاملسازی منویی.
فهرستهای رنگی کاملسازی (Colored completion listings)
هر زمان که یکی از پارامترهای ZLS_COLORS یا ZLS_COLOURS تنظیم شده باشد و ماژول zsh/complist در پوسته بارگذاری یا پیوند داده شده باشد، فهرستهای کاملسازی رنگی خواهند شد. توجه داشته باشید که در صورت عدم پیوند درونی، complist به طور خودکار بارگذاری نمیشود: در سیستمهای دارای قابلیت بارگذاری پویا، اجرای دستور `zmodload zsh/complist' الزامی است.
پارامترهای ZLS_COLORS و ZLS_COLOURS نحوه برجستهسازی تطابقها را مشخص میکنند. برای فعالسازی برجستهسازی، یک مقدار خالی کافی است که در این حالت تمام مقادیر پیشفرض ارائهشده در زیر به کار خواهند رفت. قالب مقدار این پارامترها مشابه قالب بهکاررفته در نسخه GNU دستور ls است: فهرستی جداشده با دونقطه (:) از مشخصهها به صورت `name=value'. مقدار name میتواند یکی از رشتههای زیر باشد که بیشتر آنها انواع فایل را برای تعیین value مشخص میکنند. این رشتهها و مقادیر پیشفرض آنها عبارتند از:
- no 0
- برای متن معمولی (یعنی هنگام نمایش مواردی غیر از یک فایل تطبیقیافته)
- fi 0
- برای فایلهای عادی (regular files)
- di 32
- برای دایرکتوریها
- ln 36
- برای پیوندهای نمادین (symbolic links). اگر این فیلد مقدار ویژه target را داشته باشد، پیوندهای نمادین مرجعگشایی شده و از فایل هدف برای تعیین قالب نمایش استفاده میشود.
- pi 31
- برای لولههای نامگذاریشده (FIFOs)
- so 33
- برای سوکتها
- bd 44;37
- برای دستگاههای بلوکی (block devices)
- cd 44;37
- برای دستگاههای کاراکتری (character devices)
- or none
- برای پیوند نمادین شکسته یا اشارهکننده به فایل ناموجود (پیشفرض، مقدار تعریفشده برای ln است)
- mi none
- برای یک فایل ناموجود (پیشفرض، مقدار تعریفشده برای fi است)؛ این کد در حال حاضر استفاده نمیشود
- su 37;41
- برای فایلهای دارای بیت setuid
- sg 30;43
- برای فایلهای دارای بیت setgid
- tw 30;42
- برای دایرکتوریهای قابل نوشتن همگانی دارای بیت چسبان (sticky bit)
- ow 34;43
- برای دایرکتوریهای قابل نوشتن همگانی بدون بیت چسبان
- sa none
- برای فایلهای دارای نام مستعار پسوند (suffix alias)؛ این مورد فقط پس از بررسی پسوندهای خاص آزموده میشود، همانطور که در زیر شرح داده شده است
- st 37;44
- برای دایرکتوریهای دارای بیت چسبان که برای عموم قابل نوشتن نیستند
- ex 35
- برای فایلهای اجرایی
- lc \e[
- برای کد سمت چپ (به توضیحات زیر مراجعه کنید)
- rc m
- برای کد سمت راست
- tc 0
- برای نویسه نشاندهنده نوع فایل که پس از نام فایل چاپ میشود، در صورتی که گزینه LIST_TYPES تنظیم شده باشد
- sp 0
- برای فاصلههایی که پس از موارد تطبیقیافته جهت تراز کردن ستون بعدی چاپ میشوند
- ec none
- برای کد پایانی
به جز این رشتهها، name میتواند یک علامت ستاره (`*') و به دنبال آن هر رشته دلخواهی باشد. مقدار value ارائهشده برای چنین رشتهای برای تمام فایلهایی که نامشان با آن رشته خاتمه مییابد استفاده خواهد شد. همچنین name میتواند یک علامت مساوی (`=') همراه با یک الگو باشد؛ برای ارزیابی این الگو گزینه EXTENDED_GLOB فعال خواهد شد. مقدار value ارائهشده برای این الگو برای تمام موارد تطبیقیافتهای (نه فقط نام فایلها) که رشته نمایشی آنها با الگو مطابقت داشته باشد استفاده میشود. تعاریف دارای علامت مساوی اولیه نسبت به مقادیر تعریفشده برای انواع فایل اولویت دارند، و این مقادیر نیز به نوبه خود نسبت به مشخصههای دارای علامت ستاره (پسوند فایلها) ارجحیت دارند.
قالب دارای مساوی اولیه همچنین امکان رنگآمیزی متمایز بخشهای گوناگون یک رشته نمایشی را فراهم میکند. برای این کار، الگو باید از پرچم الگوبرداری `(#b)' و جفتپرانتزهایی در اطراف بخشهایی از رشته که قرار است با رنگ دیگری نمایش داده شوند استفاده کند. در این حالت، value میتواند شامل چند کد رنگی جداشده با علامت مساوی باشد. اولین کد برای تمام بخشهایی به کار میرود که کد صریحی برایشان تعیین نشده است و کدهای بعدی برای بخشهای منطبق با زیرالگوهای داخل پرانتز اعمال میشوند. به عنوان مثال، مشخصه `=(#b)(?)*(?)=0=3=7' برای تمام مواردی که حداقل دو نویسه طول دارند استفاده میشود و کد `3' را برای نویسه نخست، `7' را برای نویسه پایانی و `0' را برای سایر بخشها به کار میبرد.
هر سه حالت name میتوانند با یک الگو درون پرانتز آغاز شوند. در صورت درج چنین الگویی، مقدار value فقط برای مواردی به کار خواهد رفت که در گروههای منطبق با الگوی درون پرانتز قرار داشته باشند. برای مثال، `(g*)m*=43' تمام موارد تطبیقیافتهای را که با `m' شروع میشوند در گروههایی که نامشان با `g' آغاز میشود با کد رنگ `43' برجسته میکند. در مورد کدهای `lc'، `rc' و `ec'، الگوی گروه نادیده گرفته میشود.
توجه داشته باشید که تمام الگوها به ترتیب حضور در مقدار پارامتر ارزیابی میشوند تا اولین الگوی منطبق تعیین و استفاده شود. الگوها میتوانند با موارد کاملسازی، توضیحات (احتمالاً همراه با فاصلههای الحاقشده جهت تراز) یا خطوطی متشکل از مورد کاملسازی و به دنبال آن توضیح تطبیق داده شوند. برای یکپارچگی رنگآمیزی ممکن است نیاز باشد از چند الگو یا الگویی همراه با ارجاع به عقب (backreferences) استفاده شود.
هنگام چاپ یک مورد، کد ابتدا مقدار lc، سپس مقدار نوع فایل یا آخرین مشخصه منطبق دارای `*'، سپس مقدار rc، خود رشته نمایشی مورد تطبیق، و در نهایت مقدار ec (در صورت تعریف) یا مقادیر lc، no و rc (اگر ec تعریف نشده باشد) را چاپ میکند.
مقادیر پیشفرض با استاندارد ISO 6429 (ANSI) سازگار هستند و میتوانند در ترمینالهای سازگار با vt100 مانند xterm استفاده شوند. در ترمینالهای تکرنگ، مقادیر پیشفرض تأثیر بصری نخواهند داشت. تابع colors موجود در بستههای الحاقی (contribution) را میتوان برای دریافت آرایههای انجمنی حاوی کدهای ترمینالهای ANSI به کار برد (بخش `Other Functions' را در zshcontrib(1) ببینید). برای نمونه پس از بارگذاری colors، میتوان از `$color[red]' برای دریافت کد رنگ پیشزمینه قرمز و از `$color[bg-green]' برای کد رنگ پسزمینه سبز استفاده کرد.
اگر از سیستم کاملسازی فراخوانیشده توسط compinit استفاده شود، این پارامترها نباید مستقیماً مقداردهی شوند زیرا خود سیستم آنها را مدیریت میکند. در عوض، باید از سبک list-colors استفاده شود (بخش `Completion System Configuration' را در zshcompsys(1) ببینید).
پیمایش در فهرستهای کاملسازی (Scrolling in completion listings)
برای فعالسازی قابلیت پیمایش (اسکرول) در فهرست کاملسازی، پارامتر LISTPROMPT باید تنظیم شود. مقدار آن به عنوان اعلان (prompt) به کار میرود؛ اگر یک رشته خالی باشد، یک اعلان پیشفرض نمایش خواهد یافت. این مقدار میتواند شامل کاراکترهای اسکیپ به فرم `%x' باشد. این پارامتر از دنبالههای اسکیپ `%B'، `%b'، `%S'، `%s'، `%U'، `%u'، `%F'، `%f'، `%K'، `%k' و `%{...%}' که در اعلانهای پوسته نیز کاربرد دارند، و همچنین سه جفت دنباله اضافی پشتیبانی میکند: `%l' یا `%L' با شماره آخرین خط نمایشدادهشده و تعداد کل خطوط به صورت `number/total' جایگزین میشود؛ `%m' یا `%M' با شماره آخرین مورد نمایشیافته و تعداد کل موارد جایگزین میگردد؛ و `%p' یا `%P' به ترتیب با `Top'، `Bottom' یا موقعیت خط اول نمایشیافته برحسب درصد کل خطوط جایگزین خواهد شد. در هر یک از این حالات، نسخه با حروف بزرگ با یک رشته با عرض ثابت که از سمت راست با فاصله پر شده جایگزین میشود، در حالی که نسخه با حروف کوچک پر نمیشود.
اگر پارامتر LISTPROMPT تنظیم شده باشد، کد کاملسازی برای نمایش فهرست سؤالی نمیپرسد. در عوض بلافاصله شروع به نمایش فهرست کرده، پس از پر شدن صفحه اول متوقف میشود، اعلان را در پایین صفحه نمایش میدهد و پس از جابهجایی موقت به نقشه کلید listscroll، منتظر فشرده شدن یک کلید میماند. برخی از توابع zle هنگام پیمایش فهرستها معنای ویژهای دارند:
- send-break
- نمایش فهرست را متوقف کرده و کلید فشردهشده را نادیده میگیرد
- accept-line, down-history, down-line-or-history
- down-line-or-search, vi-down-line-or-history
- فهرست را یک خط به جلو میپیماید
- complete-word, menu-complete, expand-or-complete
- expand-or-complete-prefix, menu-complete-or-expand
- فهرست را به اندازه یک صفحه کامل به جلو میپیماید
- accept-search
- نمایش فهرست را متوقف میکند اما اقدام دیگری انجام نمیدهد
هر نویسه دیگری نمایش فهرست را متوقف کرده و کلید مربوطه بلافاصله طبق معمول پردازش میشود. هر کلیدی که در نقشه کلید listscroll مقید نشده باشد یا به undefined-key مقید شده باشد، در نقشه کلید فعال فعلی جستجو و اجرا میگردد.
همانند پارامترهای ZLS_COLORS و ZLS_COLOURS، پارامتر LISTPROMPT نیز هنگام استفاده از سیستم کاملسازی مبتنی بر توابع پوسته نباید مستقیماً تنظیم شود. در عوض، باید سبک list-prompt به کار رود.
انتخاب منو (Menu selection)
ماژول zsh/complist سبک دیگری برای انتخاب موارد از یک فهرست ارائه میدهد که انتخاب منو (menu selection) نامیده میشود؛ این قابلیت زمانی قابل استفاده است که پوسته به گونهای تنظیم شده باشد که پس از نمایش فهرست کاملسازی به آخرین اعلان بازگردد (گزینه ALWAYS_LAST_PROMPT را در zshoptions(1) ببینید).
انتخاب منو را میتوان مستقیماً توسط ویجت menu-select تعریفشده در این ماژول فراخوانی کرد. این یک ویجت استاندارد ZLE است که میتوان آن را طبق روال معمول شرحدادهشده در zshzle(1) به یک کلید مقید کرد.
به عنوان روش دیگر، میتوان پارامتر MENUSELECT را به یک عدد صحیح تنظیم کرد که حداقل تعداد موارد تطبیقیافته لازم برای فعالسازی خودکار انتخاب منو را تعیین میکند. این روش دوم نیازمند آن است که کاملسازی منویی آغاز شده باشد، چه مستقیماً از طریق یک ویجت نظیر menu-complete و چه به دلیل تنظیم بودن یکی از گزینههای MENU_COMPLETE یا AUTO_MENU. اگر MENUSELECT تنظیم شده باشد اما مقدار آن 0، 1 یا خالی باشد، انتخاب منو همواره در طول یک کاملسازی منویی دارای ابهام آغاز خواهد شد.
هنگام استفاده از سیستم کاملسازی مبتنی بر توابع پوسته، پارامتر MENUSELECT نباید استفاده شود (مشابه پارامترهای ZLS_COLORS و ZLS_COLOURS که پیشتر توضیح داده شد). در عوض، باید از سبک menu همراه با کلیدواژه select=... استفاده گردد.
پس از آغاز انتخاب منو، موارد تطبیقیافته فهرست میشوند. اگر تعداد موارد بیش از ظرفیت صفحه باشد، فقط صفحه اول نمایش داده میشود. مواردی که باید در خط فرمان درج شوند را میتوان از این فهرست برگزید. در فهرست، یکی از موارد با استفاده از مقدار مشخصشده برای ma در پارامترهای ZLS_COLORS یا ZLS_COLOURS برجسته میشود. مقدار پیشفرض آن `7' است که باعث میشود مورد انتخابشده با حالت برجسته (standout mode) در ترمینالهای سازگار با vt100 نمایش یابد. اگر هیچیک از پارامترهای ZLS_COLORS یا ZLS_COLOURS تنظیم نشده باشند، از همان دنباله کنترلی ترمینال که برای اسکیپ `%S' در اعلانها به کار میرود استفاده خواهد شد.
اگر تعداد موارد بیشتر از گنجایش صفحه باشد و پارامتر MENUPROMPT تنظیم شده باشد، مقدار آن در زیر موارد نمایش داده میشود. این پارامتر از دنبالههای اسکیپ مشابه با LISTPROMPT پشتیبانی میکند، با این تفاوت که شماره مورد یا خط نشاندادهشده مربوط به موقعیت نشانگر خواهد بود. اگر مقدار آن یک رشته خالی باشد، یک اعلان پیشفرض به کار خواهد رفت.
پارامتر MENUSCROLL میتواند برای تعیین چگونگی پیمایش فهرست استفاده شود. اگر این پارامتر تنظیم نشده باشد، پیمایش به صورت خطبهخط انجام میگیرد؛ اگر مقدار آن برابر `0' (صفر) باشد، فهرست به اندازه نیمی از تعداد خطوط صفحه پیمایش میشود. اگر مقدار آن مثبت باشد، بیانگر تعداد خطوط پیمایش است و اگر منفی باشد، فهرست به اندازه تعداد خطوط صفحه منهای قدر مطلق آن مقدار پیمایش میگردد.
همانند پارامترهای ZLS_COLORS، ZLS_COLOURS و LISTPROMPT، پارامترهای MENUPROMPT و MENUSCROLL نیز نباید هنگام استفاده از سیستم کاملسازی مبتنی بر توابع پوسته مستقیماً تنظیم شوند. در عوض، باید سبکهای select-prompt و select-scroll به کار روند.
کد کاملسازی گاهی اوقات تصمیم میگیرد همه موارد تطبیقیافته را در فهرست نمایش ندهد. این موارد پنهان یا مواردی هستند که تابع کاملسازی افزودهکننده آنها صریحاً درخواست کرده در فهرست ظاهر نشوند (با استفاده از گزینه -n دستور توکار compadd)، یا مواردی هستند که یک رشته موجود در فهرست را تکرار میکنند (زیرا تنها در مواردی مانند پیشوندها یا پسوندهایی تفاوت دارند که نمایش داده نمیشوند). با این حال در فهرست مورد استفاده برای انتخاب منو، حتی این موارد نیز نمایش داده میشوند تا امکان انتخاب آنها وجود داشته باشد. برای برجستهسازی چنین مواردی، قابلیتهای hi و du در پارامترهای ZLS_COLORS و ZLS_COLOURS به ترتیب برای موارد پنهان نوع اول و دوم پشتیبانی میشوند.
انتخاب موارد با جابهجا کردن نشانگر با استفاده از توابع حرکتی zle صورت میگیرد. هنگامی که همه موارد به طور همزمان در صفحه جا نمیشوند، فهرست هنگام عبور از خط بالایی یا پایینی به بالا و پایین پیمایش میشود. توابع zle زیر در هنگام انتخاب منو معنای ویژهای دارند. توجه داشته باشید که موارد زیر همواره عمل یکسانی را در نقشه انتخاب منو انجام میدهند و نمیتوان آنها را با ویجتهای تعریفشده توسط کاربر جایگزین کرد، و مجموعه این توابع نیز قابل گسترش نیست:
- accept-line, accept-search
- مورد تطبیقیافته فعلی را میپذیرد و از انتخاب منو خارج میشود (اما باعث تأیید و اجرای خط فرمان نمیشود)
- send-break
- از انتخاب منو خارج شده و محتوای قبلی خط فرمان را بازمیگرداند
- redisplay, clear-screen
- عملکرد عادی خود را بدون خروج از انتخاب منو اجرا میکنند
- accept-and-hold, accept-and-menu-complete
- مورد درجشده فعلی را پذیرفته و انتخاب را ادامه میدهند تا امکان انتخاب مورد بعدی برای درج در خط فرمان فراهم باشد
- accept-and-infer-next-history
- مورد فعلی را میپذیرد و سپس مجدداً کاملسازی را همراه با انتخاب منو امتحان میکند؛ در مورد فایلها این ویژگی امکان میدهد یک دایرکتوری را انتخاب کرده و بلافاصله تلاش برای کاملسازی فایلهای درون آن آغاز شود؛ اگر موردی یافت نشد پیامی نمایش داده میشود و میتوان با undo به کاملسازی در سطح قبلی بازگشت؛ هر کلید دیگری از انتخاب منو خارج میشود (از جمله سایر توابع zle که در حالت عادی در طول انتخاب منو رفتار ویژهای دارند)
- undo
- موارد درجشده در طول انتخاب منو توسط یکی از سه تابع قبلی را حذف میکند
- down-history, down-line-or-history
- vi-down-line-or-history, down-line-or-search
- نشانگر را یک خط به پایین حرکت میدهد
- up-history, up-line-or-history
- vi-up-line-or-history, up-line-or-search
- نشانگر را یک خط به بالا حرکت میدهد
- forward-char, vi-forward-char
- نشانگر را یک ستون به راست حرکت میدهد
- backward-char, vi-backward-char
- نشانگر را یک ستون به چپ حرکت میدهد
- forward-word, vi-forward-word
- vi-forward-word-end, emacs-forward-word
- نشانگر را یک صفحه کامل به پایین حرکت میدهد
- backward-word, vi-backward-word, emacs-backward-word
- نشانگر را یک صفحه کامل به بالا حرکت میدهد
- vi-forward-blank-word, vi-forward-blank-word-end
- نشانگر را به خط اول گروه بعدی موارد حرکت میدهد
- vi-backward-blank-word
- نشانگر را به آخرین خط گروه قبلی موارد حرکت میدهد
- beginning-of-history
- نشانگر را به خط اول منتقل میکند
- end-of-history
- نشانگر را به آخرین خط منتقل میکند
- beginning-of-buffer-or-history, beginning-of-line
- beginning-of-line-hist, vi-beginning-of-line
- نشانگر را به چپترین ستون منتقل میکند
- end-of-buffer-or-history, end-of-line
- end-of-line-hist, vi-end-of-line
- نشانگر را به راستترین ستون منتقل میکند
- complete-word, menu-complete, expand-or-complete
- expand-or-complete-prefix, menu-expand-or-complete
- نشانگر را به مورد بعدی منتقل میکند
- reverse-menu-complete
- نشانگر را به مورد قبلی منتقل میکند
- vi-insert
- حالت را بین عادی و تعاملی تغییر میدهد؛ در حالت تعاملی کلیدهای مقید به self-insert و self-insert-unmeta مانند حالت ویرایش عادی نویسه را در خط فرمان درج میکنند اما بدون آنکه از انتخاب منو خارج شوند؛ پس از هر نویسه کاملسازی مجدداً آزموده میشود و فهرست تغییر میکند تا تنها شامل موارد تطبیق جدید باشد؛ ویجتهای کاملسازی طولانیترین رشته بدون ابهام را در خط فرمان درج میکنند و undo و backward-delete-char به مجموعه موارد قبلی بازمیگردند
- history-incremental-search-forward
- history-incremental-search-backward
- جستجوی افزایشی را در فهرست کاملسازیهای نمایشیافته آغاز میکند؛ در این حالت، accept-line فقط از جستجوی افزایشی خارج شده و به حالت انتخاب منوی عادی بازمیگردد
تمام توابع حرکتی در لبهها دچار چرخش (wrap around) میشوند؛ هر تابع zle دیگری که در فهرست بالا نیامده است باعث خروج از انتخاب منو و اجرای آن تابع میشود. با قرار دادن یک `.' در ابتدای نام ویجت میتوان ویجتهای موجود در فهرست فوق را نیز وادار به همین رفتار کرد. برای نمونه، ویجت `.accept-line' باعث خروج از انتخاب منو و پذیرش کل خط فرمان میشود.
در طول این انتخاب، ویجت از نقشه کلید menuselect استفاده میکند. هر کلیدی که در این نقشه کلید تعریف نشده باشد یا به undefined-key مقید شده باشد، در نقشه کلید فعال فعلی جستجو میشود. این سازوکار به منظور اطمینان از این است که کلیدهای اصلی مورد استفاده در طول انتخاب (بهویژه کلیدهای جهتنما، return و TAB) پیشفرضهای معقولی داشته باشند. با این حال، کلیدهای موجود در نقشه کلید menuselect را میتوان مستقیماً با استفاده از دستور توکار bindkey تغییر داد (راهنمای zshmodules(1) را ببینید). برای مثال برای اینکه کلید return بدون پذیرش مورد انتخابشده فعلی از انتخاب منو خارج شود، میتوان پس از بارگذاری ماژول zsh/complist دستور زیر را فراخوانی کرد:
bindkey -M menuselect '^M' send-break
ماژول ZSH/COMPUTIL (THE ZSH/COMPUTIL MODULE)
ماژول zsh/computil چندین دستور توکار اضافه میکند که توسط برخی از توابع کاملسازی در سیستم کاملسازی مبتنی بر توابع پوسته استفاده میشوند (راهنمای zshcompsys(1) را ببینید). به استثنای compquote، این دستورات توکار بسیار تخصصی هستند و بنابراین هنگام نوشتن توابع کاملسازی اختصاصی چندان کاربرد عمومی ندارند. به طور خلاصه، این دستورات توکار عبارتند از:
- comparguments
- این دستور توسط تابع _arguments برای تجزیه آرگومانها و خط فرمان استفاده میشود. همانند compdescribe، این دستور نیز گزینه -i برای انجام تجزیه و مقداردهی اولیه برخی وضعیتهای درونی، و گزینههای گوناگونی برای دسترسی به اطلاعات وضعیت جهت تصمیمگیری در مورد آنچه باید کامل شود دارد.
- compdescribe
- توسط تابع _describe برای ساخت رشتههای نمایشی موارد تطبیقیافته و دریافت رشتههایی که باید به همراه گزینههایشان به عنوان تطابق اضافه شوند استفاده میشود. در نخستین فراخوانی باید یکی از گزینههای -i یا -I به عنوان آرگومان اول ارائه شود. در حالت اول، رشتههای نمایشی بدون توضیحات تولید میشوند؛ در حالت دوم، رشتهای که برای جدا کردن موارد تطبیق از توضیحاتشان به کار میرود باید به عنوان آرگومان دوم داده شود و توضیحات (در صورت وجود) نمایش داده خواهند شد. سایر آرگومانها مشابه آرگومانهای تعریفی خود _describe هستند.
هنگامی که compdescribe با یکی از گزینههای -i یا -I فراخوانی شد، میتوان آن را مکرراً با گزینه -g و نام چهار پارامتر به عنوان آرگومانهای آن فراخوانی کرد. این کار در میان مجموعههای مختلف موارد پیمایش کرده و مقدار compstate[list] را در اولین اسکالر، گزینههای مربوط به compadd را در آرایه دوم، موارد تطبیق را در آرایه سوم، و رشتههای نمایشی در فهرست کاملسازی را در آرایه چهارم ذخیره میکند. سپس میتوان این آرایهها را مستقیماً به compadd داد تا موارد را در کد کاملسازی ثبت کند.
- compfiles
- توسط تابع _path_files برای بهینهسازی تولید بازگشتی و پیچیده نام فایلها (globbing) استفاده میشود. این دستور سه کار انجام میدهد: با گزینههای -p و -P الگوهای تطبیق مسیر (glob) را با در نظر گرفتن مسیرهای پیشتر پردازششده میسازد و تلاش میکند الگوها را با توجه به پیشوند و پسوند خط و مشخصه تطابق جاری بهینه کند. گزینه -i بررسیهای دایرکتوری را برای سبک ignore-parents انجام میدهد و گزینه -r بررسی میکند که آیا یک مؤلفه از برخی موارد تطبیق با رشته روی خط برابر است یا خیر و در صورت برابری، تمام موارد دیگر را حذف میکند.
- compgroups
- توسط تابع _tags برای پیادهسازی عملکردهای درونی سبک group-order به کار میرود. این دستور تنها نام گروههای کاملسازی را به عنوان آرگومان میپذیرد و گروهها را برای آن ایجاد میکند (شامل هر شش نوع: مرتبشده و مرتبنشده، هر دو بدون حذف موارد تکراری، با حذف تمام موارد تکراری، و با حذف موارد تکراری متوالی).
- compquote [ -p ] names ...
- ممکن است دلایلی برای نوشتن توابع کاملسازی وجود داشته باشد که نیاز دارند موارد تطبیق را با گزینه -Q به compadd اضافه کنند و نقلقولگذاری (کوتیشن) را خودشان انجام دهند. به جای تفسیر نویسه نخست کلید all_quotes از آرایه انجمنی ویژه compstate و استفاده از پرچم q برای بسط پارامترها، میتوان از این دستور توکار استفاده کرد. آرگومانها نام پارامترهای اسکالر یا آرایهای هستند و مقادیر این پارامترها بر اساس نیاز درونیترین سطح نقلقول، کوت میشوند. اگر گزینه -p داده شود، نقلقولگذاری به گونهای انجام میشود که گویی پیشوندی پیش از مقادیر پارامترها وجود دارد، به طوری که علامت مساوی ابتدایی کوت نخواهد شد.
وضعیت خروجی در صورت بروز خطا غیر صفر و در غیر این صورت صفر است.
- comptags
- comptry
- این دستورات بخشهای درونی سازوکار برچسبها (tags) را پیادهسازی میکنند.
- compvalues
- مشابه comparguments، اما برای تابع _values.
ماژول ZSH/CURSES (THE ZSH/CURSES MODULE)
ماژول zsh/curses یک دستور توکار و چندین پارامتر را در دسترس قرار میدهد.
دستورات توکار (Builtin)
- zcurses init
- zcurses end
- zcurses addwin targetwin nlines ncols begin_y begin_x [ parentwin ]
- zcurses delwin targetwin
- zcurses refresh [ targetwin ... ]
- zcurses touch targetwin ...
- zcurses move targetwin new_y new_x
- zcurses clear targetwin [ redraw | eol | bot ]
- zcurses position targetwin array
- zcurses char targetwin character
- zcurses string targetwin string
- zcurses border targetwin border
- zcurses attr targetwin [ [+|-]attribute | fg_col/bg_col ] [...]
- zcurses bg targetwin [ [+|-]attribute | fg_col/bg_col | @char ] [...]
- zcurses scroll targetwin [ on | off | [+|-]lines ]
- zcurses input targetwin [ param [ kparam [ mparam ] ] ]
- zcurses mouse [ delay num | [+|-]motion ]
- zcurses timeout targetwin intval
- zcurses querychar targetwin [ param ]
- zcurses resize height width [ endwin | nosave | endwin_nosave ]
- مدیریت و کار با پنجرههای curses. تمام موارد استفاده از این دستور باید با `zcurses init' برای مقداردهی اولیه curses آغاز شده، و با `zcurses end' خاتمه یابد؛ عدم درج `zcurses end' میتواند ترمینال را در وضعیتی نامطلوب باقی بگذارد.
زیردستور addwin پنجرهای با nlines سطر و ncols ستون ایجاد میکند. گوشه سمت چپ بالای آن در سطر begin_y و ستون begin_x صفحه نمایش قرار خواهد گرفت. targetwin یک رشته است که به نام پنجرهای اشاره میکند که در حال حاضر اختصاص نیافته است. به ویژه به قرارداد curses توجه داشته باشید که مقادیر عمودی پیش از مقادیر افقی ذکر میشوند.
اگر به addwin یک پنجره موجود به عنوان آخرین آرگومان داده شود، پنجره جدید به صورت زیرپنجرهای از parentwin ایجاد میشود. این حالت با پنجره معمولی جدید تفاوت دارد زیرا حافظه محتوای پنجره با حافظه والد به اشتراک گذاشته میشود. زیرپنجرهها باید پیش از والدشان حذف شوند. توجه داشته باشید که مختصات زیرپنجرهها برخلاف سایر پنجرهها نسبت به صفحه اصلی سنجیده میشود و نه والد.
از زیردستور delwin برای حذف پنجره ایجادشده با addwin استفاده کنید. توجه داشته باشید که end پنجرهها را به طور ضمنی حذف نمیکند، و delwin نیز تصویر روی صفحه پنجره را پاک نمیکند.
پنجره متناظر با کل صفحه نمایش قابل مشاهده stdscr نامیده میشود؛ این پنجره پس از `zcurses init' همواره وجود دارد و نمیتوان آن را با delwin حذف کرد.
زیردستور refresh پنجره targetwin را بازنشانی و تازهسازی میکند؛ این کار برای اینکه تغییرات معلق (مانند کاراکترهایی که با char برای خروجی آماده کردهاید) روی صفحه قابل مشاهده شوند الزامی است. فراخوانی refresh بدون آرگومان باعث پاک شدن و بازرسم کل صفحه میشود. اگر چندین پنجره داده شود، صفحه نمایش در پایان کار یک بار بهروزرسانی خواهد شد.
زیردستور touch پنجرههای targetwin فهرستشده را به عنوان تغییریافته علامتگذاری میکند. این کار پیش از refresh پنجرهها در صورتی که پنجرهای که جلوی پنجره دیگری (که ممکن است stdscr باشد) بوده حذف شود، ضروری است.
زیردستور move موقعیت مکاننما را در targetwin به مختصات جدید new_y و new_x منتقل میکند. توجه داشته باشید که زیردستور string (برخلاف زیردستور char) مکاننما را به اندازه نویسههای اضافهشده به جلو میبرد.
زیردستور clear محتوای targetwin را پاک میکند. میتوان یکی (و نه بیش از یکی) از سه گزینه را تعیین کرد: با گزینه redraw، علاوه بر پاک شدن، در refresh بعدی targetwin صفحه پاک شده و مجدداً رسم میشود. با گزینه eol، پنجره targetwin فقط تا انتهای خط فعلی مکاننما پاک میشود. با گزینه bot، پنجره targetwin تا انتهای پنجره پاک میشود، یعنی همه چیز در سمت راست و پایین مکاننما پاک خواهد شد.
زیردستور position موقعیتهای مختلف مربوط به targetwin را در آرایهای به نام array مینویسد. این مقادیر به ترتیب عبارتند از:
- -
- مختصات y و x مکاننما نسبت به گوشه بالا سمت چپ targetwin
- -
- مختصات y و x گوشه بالا سمت چپ targetwin روی صفحه نمایش
- -
- اندازه targetwin در ابعاد y و x.
چاپ نویسهها و رشتهها به ترتیب با دستورات char و string انجام میشود.
برای رسم کادر در اطراف پنجره targetwin، از border استفاده کنید. توجه داشته باشید که کادر پس از آن رفتار خاصی ندارد: به بیان دیگر، کادر صرفاً مجموعهای از نویسههای چاپشده در لبههای پنجره است؛ بنابراین ممکن است بازنویسی شود، با اسکرول از پنجره خارج گردد و غیره.
زیردستور attr صفات پنجره targetwin یا جفت رنگ پیشزمینه/پسزمینه را برای خروجیهای متوالی بعدی نویسهها تنظیم میکند. هر attribute ارائهشده روی خط میتواند با یک + برای فعالسازی یا یک - برای غیرفعالسازی همراه باشد؛ در صورت عدم درج، + فرض میشود. صفات پشتیبانیشده عبارتند از blink، bold، dim، reverse، standout و underline.
هر صفت fg_col/bg_col (به صورت «رنگ پیشزمینه روی رنگ پسزمینه») رنگ پیشزمینه و پسزمینه را برای چاپ نویسهها تعیین میکند. رنگ default گاهی در دسترس است (بهویژه اگر کتابخانه ncurses باشد)، که بیانگر رنگ پیشزمینه یا پسزمینهای است که ترمینال با آن آغاز شده است. جفت رنگ default/default همیشه در دسترس است. برای استفاده از رنگهایی بیش از 8 رنگ نامگذاریشده (قرمز، سبز و...) جفتهای fg_col/bg_col را بسازید که در آنها fg_col و bg_col اعداد صحیح دهدهی باشند، مثلاً 128/200. اگر ترمینال از ۲۵۶ رنگ پشتیبانی کند، حداکثر مقدار رنگ ۲۵۴ است.
دستور bg رنگ و سایر صفات تمام نویسههای موجود در پنجره را بازنویسی میکند. کاربرد معمول آن تنظیم پسزمینه در ابتدا است، اما صفات هر نویسهای را در زمان فراخوانی بازنویسی خواهد کرد. علاوه بر آرگومانهای مجاز در attr، یک آرگومان به صورت @char نویسهای را تعیین میکند که در نواحی خالی پنجره نمایش داده شود. به دلیل محدودیتهای curses این نویسه نمیتواند چندبایتی باشد (تنها استفاده از نویسههای ASCII توصیه میشود). از آنجا که صفات ارائهشده جایگزین پسزمینه موجود میشوند، خاموش کردن صفات در آرگومانها اثری ندارد، هرچند خطایی نیز ایجاد نمیکند.
زیردستور scroll را میتوان با on یا off برای فعال یا غیرفعال کردن پیمایش پنجره هنگامی که مکاننما بر اثر تایپ یا خروجی به زیر پنجره حرکت میکند استفاده کرد. همچنین میتوان آن را با یک عدد صحیح مثبت یا منفی به کار برد تا پنجره به تعداد خطوط مشخصشده به سمت بالا یا پایین پیمایش شود بدون آنکه موقعیت فعلی مکاننما تغییر کند (بنابراین به نظر میرسد مکاننما نسبت به پنجره در جهت مخالف حرکت کرده است). در حالت دوم اگر پیمایش off باشد، موقتاً on میشود تا پیمایش پنجره انجام پذیرد.
زیردستور input یک نویسه منفرد را از پنجره میخواند بدون آنکه آن را پژواک دهد. اگر param داده شود، نویسه به پارامتر param اختصاص مییابد، در غیر این صورت در پارامتر REPLY ذخیره میشود.
اگر هر دو پارامتر param و kparam داده شوند، کلید در حالت «keypad» خوانده میشود. در این حالت کلیدهای ویژه مانند کلیدهای تابعی (F-keys) و کلیدهای جهتنما، نام کلید را در پارامتر kparam بازمیگردانند. نام کلیدها همان ماکروهای تعریفشده در curses.h یا ncurses.h با حذف پیشوند `KEY_' هستند؛ همچنین توضیحات پارامتر zcurses_keycodes در زیر را ببینید. سایر کلیدها طبق روال پیشین مقداری در param قرار میدهند. در صورت بازگشت موفقیتآمیز، تنها یکی از param یا kparam حاوی رشته غیرخالی خواهد بود و دیگری به رشته خالی تنظیم میشود.
اگر mparam نیز داده شود، input تلاش میکند ورودی ماوس را مدیریت کند. این قابلیت تنها با کتابخانه ncurses در دسترس است؛ پشتیبانی از ماوس را میتوان با بررسی وضعیت خروج `zcurses mouse' بدون آرگومان سنجید. اگر یکی از دکمههای ماوس کلیک شود (یا دوبارکلیک، سهبارکلیک، یا فشرده و رها شود با تاخیر قابل تنظیم نسبت به کلیک)، مقدار kparam برابر رشته MOUSE تنظیم میشود و mparam برابر آرایهای شامل عناصر زیر خواهد شد:
- -
- یک شناسه برای تفکیک دستگاههای ورودی مختلف؛ این مورد به ندرت مفید است.
- -
- مختصات x، y و z کلیک ماوس نسبت به کل صفحه، به صورت سه عنصر با همان ترتیب (یعنی برخلاف معمول، مختصات y پس از مختصات x قرار دارد). مختصات z فقط برای تعداد اندکی از دستگاههای ورودی غیرمعمول در دسترس است و در سایر موارد صفر خواهد بود.
- -
- هر رویدادی که به عنوان آیتم جداگانه رخ داده است؛ معمولاً تنها یک مورد خواهد بود. یک رویداد شامل PRESSED، RELEASED، CLICKED، DOUBLE_CLICKED یا TRIPLE_CLICKED است که بلافاصله (در همان عنصر) شماره دکمه به دنبال آن میآید.
- -
- اگر کلید shift فشرده شده بود، رشته SHIFT.
- -
- اگر کلید control فشرده شده بود، رشته CTRL.
- -
- اگر کلید alt فشرده شده بود، رشته ALT.
همه رویدادهای ماوس ممکن است به پنجره ترمینال ارسال نشوند؛ اغلب شبیهسازهای ترمینال برخی رویدادهای ماوس را خود مدیریت میکنند. توجه داشته باشید راهنمای ncurses متذکر شده که استفاده از ورودی هم با مدیریت ماوس و هم بدون آن ممکن است باعث ظاهر و ناپدید شدن مکاننمای ماوس گردد.
زیردستور mouse برای پیکربندی رفتار ماوس به کار میرود. آرگومان پنجره وجود ندارد؛ گزینههای ماوس سراسری هستند. اجرای `zcurses mouse' بدون آرگومان در صورت امکان مدیریت ماوس وضعیت 0 و در غیر این صورت وضعیت 1 را بازمیگرداند. در غیر این صورت، آرگومانهای ممکن (که میتوان آنها را در یک خط فرمان ترکیب کرد) به شرح زیر هستند: delay num حداکثر تاخیر را برحسب میلیثانیه بین رویدادهای فشردن و رها کردن تعیین میکند تا به عنوان کلیک تلقی شود؛ مقدار 0 تفکیک کلیک را غیرفعال میکند و پیشفرض یکششم ثانیه است. motion همراه با یک `+' اختیاری (پیشفرض) یا `-' گزارش حرکت ماوس را علاوه بر کلیکها، فشردنها و رها کردنها (که همواره گزارش میشوند) فعال یا غیرفعال میکند. با این حال به نظر میرسد گزارش حرکت ماوس در حال حاضر پیادهسازی نشده است.
زیردستور timeout مقدار زمانانتظار (timeout) را برای ورودی از targetwin تعیین میکند. اگر intval منفی باشد، `zcurses input' برای همیشه منتظر تایپ نویسه میماند؛ این حالت پیشفرض است. اگر intval صفر باشد، `zcurses input' بلافاصله بازمیگردد؛ اگر ورودی پیشتایپشده وجود داشته باشد بازگردانده میشود، وگرنه ورودی دریافت نشده و وضعیت 1 برمیگردد. اگر intval مثبت باشد، `zcurses input' به مدت intval میلیثانیه منتظر ورودی میماند و اگر در پایان این بازه ورودی وجود نداشته باشد، وضعیت 1 را بازمیگرداند.
زیردستور querychar نویسه موجود در موقعیت فعلی مکاننما را بررسی میکند. مقادیر بازگشتی در صورت ارائه در آرایهای به نام param و در غیر این صورت در آرایه reply ذخیره میشوند. اولین مقدار نویسه است (که در صورت پشتیبانی سیستم ممکن است چندبایتی باشد)؛ مقدار دوم جفترنگ با نگارش متداول fg_col/bg_col است، یا در صورت عدم پشتیبانی از رنگ 0 خواهد بود. هر صفت دیگری به جز رنگ که بر نویسه اعمال شده باشد (همانطور که با زیردستور attr تنظیم میشود)، به عنوان عناصر بیشتر ظاهر خواهند شد.
زیردستور resize اندازه stdscr و تمام پنجرهها را به ابعاد دادهشده تغییر میدهد (پنجرههایی که از ابعاد جدید بیرون بزنند کوچکتر میشوند). ممکن است افزونه زیربنایی curses (فراخوانی resize_term) در دسترس نباشد. برای بررسی میتوان از صفر برای height و width استفاده کرد. اگر نتیجه زیردستور 0 باشد فراخوانی resize_term در دسترس است (در غیر این صورت 2). آزمایشها نشان میدهند که تغییر اندازه را معمولاً میتوان با فراخوانی zcurses end و zcurses refresh انجام داد. زیردستور resize برای انعطافپذیری بیشتر ارائه شده است. پیکربندیهای چندگانه سیستم بررسی شدهاند و zcurses end و zcurses refresh همچنان برای وضعیت صحیح ترمینال پس از تغییر اندازه مورد نیاز هستند. برای فراخوانی آنها همراه با resize، از آرگومان endwin استفاده کنید. استفاده از آرگومان nosave باعث میشود وضعیت جدید ترمینال به صورت درونی توسط zcurses ذخیره نشود. این مورد نیز برای انعطافپذیری فراهم شده و در حالت عادی نیازی به آن نیست.
پارامترها (Parameters)
- ZCURSES_COLORS
- عدد صحیح فقطخواندنی. حداکثر تعداد رنگهایی که ترمینال پشتیبانی میکند. این مقدار توسط کتابخانه curses مقداردهی اولیه میشود و تا پیش از نخستین اجرای zcurses init در دسترس نیست.
- ZCURSES_COLOR_PAIRS
- عدد صحیح فقطخواندنی. حداکثر تعداد جفترنگهای fg_col/bg_col که میتوان در دستورات `zcurses attr' تعریف کرد؛ توجه داشته باشید این محدودیت شامل تمام جفترنگهای استفادهشده میشود، چه در حال حاضر فعال باشند و چه نباشند. این مقدار توسط کتابخانه curses مقداردهی میشود و تا پیش از نخستین اجرای zcurses init در دسترس نخواهد بود.
- zcurses_attrs
- آرایه فقطخواندنی. صفات پشتیبانیشده توسط zsh/curses؛ به محض بارگذاری ماژول در دسترس است.
- zcurses_colors
- آرایه فقطخواندنی. رنگهای پشتیبانیشده توسط zsh/curses؛ به محض بارگذاری ماژول در دسترس است.
- zcurses_keycodes
- آرایه فقطخواندنی. مقادیری که ممکن است در دومین پارامتر ارائهشده به `zcurses input' بازگردانده شوند، به ترتیبی که به صورت درونی توسط curses تعریف شدهاند. همه کلیدهای تابعی ذکر نشدهاند و فقط F0 آمده است؛ curses فضایی برای کلیدهای F0 تا F63 رزرو میکند.
- zcurses_windows
- آرایه فقطخواندنی. فهرست پنجرههای فعلی، یعنی تمام پنجرههایی که با `zcurses addwin' ایجاد شده و با `zcurses delwin' حذف نشدهاند.
ماژول ZSH/DATETIME (THE ZSH/DATETIME MODULE)
ماژول zsh/datetime یک دستور توکار در دسترس قرار میدهد:
- strftime [ -s scalar | -n ] format [ epochtime [ nanoseconds ] ]
- strftime -r [ -q ] [ -s scalar | -n ] format timestring
- تاریخ را در قالب format مشخصشده چاپ میکند. بدون epochtime، تاریخ/زمان فعلی سیستم به کار میرود؛ به صورت اختیاری میتوان از epochtime برای مشخص کردن تعداد ثانیههای سپریشده از زمان مبدأ (epoch) استفاده کرد، و از nanoseconds نیز میتوان برای تعیین تعداد نانوثانیههای پس از ثانیه بهره برد (در غیر این صورت این عدد 0 فرض میشود). برای جزئیات راهنمای strftime(3) را ببینید. افزونههای zsh شرحدادهشده در بخش EXPANSION OF PROMPT SEQUENCES در zshmisc(1) نیز در دسترس هستند.
- -n
- از چاپ خط جدید پس از رشته قالببندیشده جلوگیری میکند.
- -q
- اجرا در حالت بیصدا؛ از چاپ تمام پیامهای خطای شرحدادهشده در زیر جلوگیری میکند. خطاهای مربوط به مقادیر نامعتبر epochtime همواره چاپ میشوند.
- -r
- با گزینه -r (معکوس)، از format برای تجزیه رشته ورودی timestring استفاده کرده و تعداد ثانیههای سپریشده از زمان مبدأ را که در آن زمان رخ داده چاپ میکند. این تجزیه توسط تابع سیستمی strptime پیادهسازی شده است؛ راهنمای strptime(3) را ببینید. این بدان معناست که افزونههای قالب zsh در دسترس نیستند، اما برای جستجوی معکوس نیز نیازی به آنها نیست.
در بیشتر پیادهسازیهای strftime هرگونه منطقه زمانی موجود در timestring نادیده گرفته شده و از منطقه زمانی محلی اعلانشده توسط متغیر محیطی TZ استفاده میشود؛ سایر پارامترها در صورت عدم حضور روی صفر تنظیم میشوند.
اگر timestring با format مطابقت نداشته باشد، دستور وضعیت 1 را بازگردانده و پیام خطا چاپ میکند. اگر timestring با format تطابق داشته باشد اما همه نویسههای timestring استفاده نشده باشند، تبدیل با موفقیت انجام میشود اما پیام خطایی نیز چاپ خواهد شد.
اگر هیچیک از توابع سیستمی strptime یا mktime در دسترس نباشند، وضعیت 2 بازگردانده شده و یک پیام خطا چاپ میشود.
- -s scalar
- رشته تاریخ (یا زمان مبدأ برحسب ثانیه در صورت درج -r) را به جای چاپ کردن، به متغیر scalar اختصاص میدهد.
توجه داشته باشید که بسته به نوع داده زمانی صحیح اعلانشده در سیستم، strftime ممکن است برای زمانهای مبدأ بزرگتر از 2147483647 (که متناظر با 2038-01-19 03:14:07 +0000 است) نتایج نادرستی تولید کند.
ماژول zsh/datetime چندین پارامتر در دسترس قرار میدهد؛ همگی فقطخواندنی هستند:
- EPOCHREALTIME
- یک مقدار ممیز شناور که بیانگر تعداد ثانیههای سپریشده از مبدأ زمانی است. دقت فرضی در صورت در دسترس بودن فراخوانی clock_gettime در حد نانوثانیه و در غیر این صورت میکروثانیه است، اما در عمل دامنه دقت مضاعف ممیز شناور و تاخیرهای زمانبندی پوسته ممکن است اثرات قابل توجهی داشته باشند.
- EPOCHSECONDS
- یک مقدار عدد صحیح که بیانگر تعداد ثانیههای سپریشده از زمان مبدأ است.
- epochtime
- یک مقدار آرایهای که حاوی تعداد ثانیههای سپریشده از زمان مبدأ در عنصر اول و باقیمانده زمان پس از مبدأ برحسب نانوثانیه در عنصر دوم است. برای اطمینان از همگام بودن دو عنصر، این آرایه باید پیش از استفاده از مقادیر آن کپی شده یا به صورت یک جایگزینی یکپارچه مرجع داده شود. الگوی زیر میتواند به کار رود:
for secs nsecs in $epochtime; do ... done
ماژول ZSH/DB/GDBM (THE ZSH/DB/GDBM MODULE)
ماژول zsh/db/gdbm برای ایجاد آرایههای انجمنی «وابسته» (tied) استفاده میشود که به عنوان رابط فایلهای پایگاهداده عمل میکنند. در صورتی که رابط GDBM در دسترس نباشد، دستورات توکار تعریفشده توسط این ماژول خطا گزارش میدهند. این ماژول همچنین به عنوان یک نمونه اولیه جهت ایجاد رابطهای پایگاهداده دیگر طراحی شده است، بنابراین ممکن است دستور توکار ztie در آینده به یک ماژول عمومیتر منتقل شود.
دستورات توکار این ماژول عبارتند از:
- ztie -d db/gdbm -f filename [ -r ] arrayname
- پایگاهداده GDBM مشخصشده توسط filename را باز کرده و در صورت موفقیت، آرایه انجمنی arrayname متصل به آن فایل را ایجاد میکند. برای ایجاد یک آرایه وابسته محلی، ابتدا باید پارامتر اعلان شود، بنابراین دستوراتی مشابه زیر در حوزه یک تابع اجرا خواهند شد:
local -A sampledb ztie -d db/gdbm -f sample.gdbm sampledb
گزینه -r فایل پایگاهداده را صرفاً برای خواندن باز میکند و پارامتری با صفت فقطخواندنی ایجاد مینماید. بدون این گزینه، اجرای `ztie' روی فایلی که کاربر مجوز نوشتن روی آن را ندارد خطا خواهد داد. در صورت قابل نوشتن بودن، پایگاهداده به صورت همگام باز میشود تا فیلدهای تغییریافته در arrayname بلافاصله در filename نوشته شوند.
تغییر در مجوزهای فایل filename پس از باز شدن آن، وضعیت arrayname را تغییر نمیدهد، اما `typeset -r arrayname' طبق انتظار کار خواهد کرد.
- zuntie [ -u ] arrayname ...
- پایگاهداده GDBM متصل به هر arrayname را میبندد و سپس پارامتر را لغو مقداردهی (unset) میکند. گزینه -u لغو مقداردهی پارامترهایی را که با `ztie -r' فقطخواندنی شدهاند تحمیل میکند.
این کار در صورتی که پارامتر به طور صریح لغو مقداردهی شود یا دامنه محلی (تابع) آن به پایان برسد، به طور خودکار رخ میدهد. توجه داشته باشید که یک پارامتر فقطخواندنی را نمیتوان به طور صریح لغو مقداردهی کرد، بنابراین تنها راه برای حذف یک پارامتر سراسری ایجادشده با `ztie -r' استفاده از `zuntie -u' است.
- zgdbmpath parametername
- مسیر فایل پایگاهداده اختصاصیافته به parametername را در متغیر اسکالر REPLY قرار میدهد.
- zgdbm_tied
- آرایهای حاوی نام تمام پارامترهای متصلشده (tied).
فیلدهای یک آرایه انجمنی متصل به GDBM نه کش میشوند و نه به روش دیگری در حافظه نگهداری میشوند؛ آنها در هر بار ارجاع، از پایگاهداده خوانده شده یا در آن نوشته میشوند. بنابراین به عنوان مثال، مقادیر موجود در یک آرایه فقطخواندنی ممکن است توسط نویسنده دیگری روی همان فایل پایگاهداده تغییر کند.
ماژول ZSH/DELTOCHAR (THE ZSH/DELTOCHAR MODULE)
ماژول zsh/deltochar دو تابع ZLE را در دسترس قرار میدهد:
- delete-to-char
- یک نویسه را از صفحهکلید میخواند، و از موقعیت مکاننما تا وقوع بعدی (یا با شمارش تکرار n، وقوع nام) آن نویسه (شامل خود نویسه) را حذف میکند. شمارش تکرار منفی به معنای حذف به سمت عقب است.
- zap-to-char
- این تابع مشابه delete-to-char عمل میکند، با این تفاوت که وقوع پایانی خود آن نویسه حذف نمیشود.
ماژول ZSH/EXAMPLE (THE ZSH/EXAMPLE MODULE)
ماژول zsh/example یک دستور توکار در دسترس قرار میدهد:
- example [ -flags ] [ args ... ]
- پرچمها و آرگومانهایی را که با آن فراخوانی شده است نمایش میدهد.
هدف این ماژول این است که به عنوان نمونهای از نحوه نگارش یک ماژول عمل کند.
ماژول ZSH/FILES (THE ZSH/FILES MODULE)
ماژول zsh/files برخی از دستورات متداول برای دستکاری و مدیریت فایلها را به عنوان دستورات توکار فراهم میکند؛ این دستورات احتمالاً در بسیاری از شرایط عادی مورد نیاز نیستند اما میتوانند در موقعیتهای بازیابی اضطراری با منابع محدود مفید باشند. این دستورات همه ویژگیهای الزامشده توسط کمیتههای استاندارد مربوطه را پیادهسازی نمیکنند.
برای تمام دستورات، نسخهای با پیشوند zf_ نیز موجود بوده و به طور خودکار بارگذاری میشود. استفاده از قابلیت ویژگیهای zmodload امکان میدهد فقط نامهای مورد نظرتان را بارگذاری کنید. توجه داشته باشید که میتوان تنها دستورات توکار با نامهای مختص zsh را با دستور زیر بارگذاری کرد:
zmodload -m -F zsh/files b:zf_\*
دستوراتی که به طور پیشفرض بارگذاری میشوند عبارتند از:
- chgrp [ -hRs ] group filename ...
- گروه فایلهای مشخصشده را تغییر میدهد. این معادل chown با آرگومان user-spec به صورت `:group' است.
- chmod [ -Rs ] mode filename ...
- حالت دسترسی فایلهای مشخصشده را تغییر میدهد.
مقدار mode مشخصشده باید در مبنای هشت (اکتال) باشد.
گزینه -R باعث میشود chmod به صورت بازگشتی وارد دایرکتوریها شده، و پس از تغییر حالت دسترسی خود دایرکتوری، حالت دسترسی تمام فایلهای درون آن را تغییر دهد.
گزینه -s یک افزونه zsh برای عملکردهای chmod است. این گزینه رفتار محتاطانه (paranoid) را فعال میکند که هدف آن جلوگیری از مشکلات امنیتی ناشی از فریب خوردن chmod برای تأثیر گذاشتن بر فایلهایی غیر از موارد مورد نظر است. این دستور از دنبال کردن پیوندهای نمادین خودداری میکند، به طوری که مثلاً دستور ``chmod 600 /tmp/foo/passwd'' نتواند تصادفاً مجوزهای /etc/passwd را تغییر دهد اگر /tmp/foo پیوندی به /etc باشد. همچنین پس از خروج از دایرکتوریها موقعیت خود را بررسی میکند تا یک chmod بازگشتی در درختی عمیق از دایرکتوریها نتواند در نتیجه جابهجا شدن دایرکتوریها به سمت بالای درخت، به تغییر بازگشتی مجوزهای /usr منجر شود.
- chown [ -hRs ] user-spec filename ...
- مالکیت و گروه فایلهای مشخصشده را تغییر میدهد.
مشخصه user-spec میتواند به چهار شکل باشد:
- user
- مالک را به user تغییر میدهد؛ گروه را تغییر نمیدهد
- user::
- مالک را به user تغییر میدهد؛ گروه را تغییر نمیدهد
- user:
- مالک را به user تغییر میدهد؛ گروه را به گروه اصلی user تغییر میدهد
- user:group
- مالک را به user و گروه را به group تغییر میدهد
- :group
- مالک را تغییر نمیدهد؛ گروه را به group تغییر میدهد
در هر حالت، `:' میتواند به جای آن `.' باشد. قاعده این است که اگر `:' وجود داشته باشد جداکننده `:' است، در غیر این صورت اگر `.' وجود داشته باشد جداکننده `.' است، وگرنه جداکنندهای وجود ندارد.
هر یک از user و group میتوانند نام کاربری (یا نام گروه) یا شناسه عددی دهدهی کاربر (شناسه گروه) باشند. تفسیر به عنوان نام در صورتی که یک نام کاربری (یا نام گروه) کاملاً عددی وجود داشته باشد، اولویت دارد.
اگر هدف یک پیوند نمادین باشد، گزینه -h باعث میشود chown مالکیت خود پیوند را به جای هدف آن تنظیم کند.
گزینه -R باعث میشود chown به صورت بازگشتی وارد دایرکتوریها شود و مالکیت تمام فایلهای درون دایرکتوری را پس از تغییر مالکیت خود دایرکتوری تغییر دهد.
گزینه -s یک افزونه zsh برای قابلیتهای chown است. این گزینه رفتار محتاطانه را برای جلوگیری از مشکلات امنیتی فعال میکند تا از فریب خوردن chown برای اثرگذاری بر فایلهایی غیر از موارد مورد نظر جلوگیری شود. این گزینه از دنبال کردن پیوندهای نمادین خودداری میکند، به طوری که دستور ``chown luser /tmp/foo/passwd'' نتواند تصادفاً مالکیت /etc/passwd را تغییر دهد اگر /tmp/foo پیوندی به /etc باشد. همچنین پس از خروج از دایرکتوریها بررسی میکند کجاست، تا تغییر مالکیت بازگشتی یک درخت عمیق نتواند در اثر جابهجا شدن دایرکتوریها منجر به تغییر بازگشتی مالکیت /usr شود.
- ln [ -dfhins ] filename dest
- ln [ -dfhins ] filename ... dir
- پیوندهای سخت (یا با -s، نمادین) ایجاد میکند. در حالت اول، مقصد مشخصشده dest به عنوان پیوندی به filename دادهشده ایجاد میشود. در حالت دوم، هر یک از filenameها به نوبت در نظر گرفته شده و به مسیری در دایرکتوری dir مشخصشده که آخرین مؤلفه نام آن یکسان است پیوند داده میشوند.
به طور معمول، ln برای ایجاد پیوندهای سخت به دایرکتوریها تلاش نخواهد کرد. این بررسی را میتوان با گزینه -d لغو کرد. معمولاً تنها کاربر ارشد (ریشه) میتواند در ایجاد پیوندهای سخت به دایرکتوریها موفق شود. این محدودیت در هر حال شامل پیوندهای نمادین نمیشود.
به طور پیشفرض، فایلهای موجود را نمیتوان با پیوندها جایگزین کرد. گزینه -i باعث پرسش از کاربر در مورد جایگزینی فایلهای موجود میشود. گزینه -f باعث میشود فایلهای موجود بدون پرسش و در سکوت حذف شوند. گزینه -f اولویت دارد.
گزینههای -h و -n یکسان هستند و هر دو برای سازگاری وجود دارند؛ هر کدام نشان میدهند که اگر هدف یک پیوند نمادین است، نباید مرجعگشایی شود. معمولاً این گزینه در ترکیب با -sf استفاده میشود تا در صورتی که پیوند موجود به یک دایرکتوری اشاره میکند، به جای دنبال شدن، حذف گردد. اگر این گزینه با چند نام فایل استفاده شود و هدف پیوندی نمادین به یک دایرکتوری باشد، نتیجه خطا خواهد بود.
- mkdir [ -p ] [ -m mode ] dir ...
- دایرکتوری ایجاد میکند. با گزینه -p، دایرکتوریهای والد ناموجود در صورت نیاز ابتدا ایجاد میشوند، و اگر دایرکتوری از قبل وجود داشته باشد خطایی اعلام نمیشود. از گزینه -m میتوان برای تعیین (در مبنای هشت) مجموعهای از مجوزهای فایل برای دایرکتوریهای ایجادشده استفاده کرد، در غیر این صورت حالت 777 که با umask فعلی تعدیل شده به کار میرود (راهنمای umask(2) را ببینید).
- mv [ -fi ] filename dest
- mv [ -fi ] filename ... dir
- فایلها را منتقل میکند. در حالت اول، filename مشخصشده به مقصد dest دادهشده منتقل میشود. در حالت دوم، هر یک از filenameها به نوبت در نظر گرفته شده و به مسیری در دایرکتوری dir مشخصشده که آخرین جزء نام آن یکسان است منتقل میشوند.
به طور پیشفرض، پیش از جایگزینی فایلی که کاربر دسترسی نوشتن به آن را ندارد از او سوال پرسیده میشود، اما فایلهای قابل نوشتن بدون اعلان حذف میشوند. گزینه -i باعث میشود درباره جایگزینی هر فایل موجودی از کاربر سوال شود. گزینه -f باعث میشود هر فایل موجود بدون سوال حذف گردد. گزینه -f ارجحیت دارد.
توجه داشته باشید که این دستور mv فایلها را میان دستگاههای مختلف (دیسکها یا پارتیشنهای گوناگون) منتقل نمیکند. نسخههای پیشین mv هنگامی که تغییر نام واقعی ناممکن بود، به کپی و سپس حذف فایلها متوسل میشدند؛ اگر این رفتار مورد نظر است، از cp و rm به صورت دستی استفاده کنید. این موضوع ممکن است در نسخههای آینده تغییر کند.
- rm [ -dfiRrs ] filename ...
- فایلها و دایرکتوریهای مشخصشده را حذف میکند.
به طور معمول، rm دایرکتوریها را حذف نمیکند (مگر با گزینههای -R یا -r). گزینه -d باعث میشود rm تلاش کند دایرکتوریها را با unlink حذف کند (راهنمای unlink(2) را ببینید)، همان روشی که برای فایلها به کار میرود. معمولاً تنها کاربر ارشد میتواند دایرکتوریها را با این روش حذف کند. گزینه -d نسبت به -R و -r اولویت دارد.
به طور پیشفرض، پیش از حذف فایلی که کاربر اجازه نوشتن روی آن را ندارد سوال پرسیده میشود، اما فایلهای قابل نوشتن بدون اعلان حذف میگردند. گزینه -i باعث پرسش پیش از حذف هر فایلی میشود. گزینه -f باعث حذف فایلها در سکوت، بدون پرسش و بدون نمایش نشانههای خطا میگردد. -f ارجحیت دارد.
گزینههای -R و -r باعث میشوند rm به صورت بازگشتی وارد دایرکتوریها شده، و تمام فایلهای درون دایرکتوری را پیش از حذف خود دایرکتوری با فراخوانی سیستمی rmdir حذف کند (راهنمای rmdir(2) را ببینید).
گزینه -s یک افزونه zsh برای عملکردهای rm است. این گزینه رفتار محتاطانه را برای جلوگیری از مشکلات امنیتی رایج فعال میکند تا از فریب خوردن rm اجراشده توسط ریشه برای حذف فایلهایی غیر از موارد مورد نظر ممانعت به عمل آید. این گزینه از دنبال کردن پیوندهای نمادین خودداری میکند، بنابراین مثلاً دستور ``rm /tmp/foo/passwd'' نمیتواند تصادفاً /etc/passwd را حذف کند اگر /tmp/foo پیوندی به /etc باشد. همچنین پس از خروج از دایرکتوریها بررسی میکند کجاست، تا حذف بازگشتی یک درخت عمیق نتواند در نتیجه جابهجا شدن دایرکتوریها به حذف بازگشتی /usr منتهی شود.
- rmdir dir ...
- دایرکتوریهای خالی مشخصشده را حذف میکند.
- sync
- فراخوانی سیستمی همنام خود را فرا میخواند (راهنمای sync(2) را ببینید)، که بافرهای تغییریافته (dirty) را روی دیسک تخلیه میکند. این دستور ممکن است پیش از پایان کامل عملیات ورودی/خروجی بازگردد.
ماژول ZSH/LANGINFO (THE ZSH/LANGINFO MODULE)
ماژول zsh/langinfo یک پارامتر را در دسترس قرار میدهد:
- langinfo
- یک آرایه انجمنی که عناصر langinfo را به مقادیر آنها نگاشت میکند.
پیادهسازی سیستم شما ممکن است از تعدادی از کلیدهای زیر پشتیبانی کند:
CODESET, D_T_FMT, D_FMT, T_FMT, RADIXCHAR, THOUSEP, YESEXPR, NOEXPR, CRNCYSTR, ABDAY_{1..7}, DAY_{1..7}, ABMON_{1..12}, MON_{1..12}, T_FMT_AMPM, AM_STR, PM_STR, ERA, ERA_D_FMT, ERA_D_T_FMT, ERA_T_FMT, ALT_DIGITS
ماژول ZSH/MAPFILE (THE ZSH/MAPFILE MODULE)
ماژول zsh/mapfile یک پارامتر آرایه انجمنی ویژه با همین نام فراهم میکند.
- mapfile
- این آرایه انجمنی نام فایلها را به عنوان کلید میپذیرد؛ مقدار حاصل محتوای فایل خواهد بود. این مقدار دقیقاً مشابه هر متن دیگری که از یک پارامتر میآید پردازش میشود. همچنین میتوان به این مقدار تخصیص داد، که در این صورت فایل مربوطه نوشته میشود (خواه از ابتدا وجود داشته باشد یا خیر)؛ یا یک عنصر را میتوان لغو مقداردهی (unset) کرد، که فایل مربوطه را حذف خواهد کرد. برای نمونه، دستور `vared 'mapfile[myfile]'' طبق انتظار کار کرده و فایل `myfile' را ویرایش میکند.
هنگامی که به کل آرایه دسترسی پیدا شود، کلیدها نام فایلهای موجود در دایرکتوری جاری بوده و مقادیر آنها خالی است (برای صرفهجویی در بار سنگین حافظه). بنابراین ${(k)mapfile} همان اثری را دارد که عملگر انطباق مسیر *(D) دارد، زیرا فایلهای با نقطه آغازین رفتار خاصی ندارند. در عباراتی نظیر rm ${(k)mapfile} باید دقت زیادی شود، زیرا تمام فایلهای دایرکتوری جاری را بدون بررسی معمول `rm *' حذف خواهد کرد.
پارامتر mapfile را میتوان فقطخواندنی کرد؛ در این حالت، فایلهای ارجاعشده را نمیتوان بازنویسی یا حذف کرد.
یک فایل را میتوان به راحتی با قالب `array=("${(f@)mapfile[filename]}")' به صورت یک خط در هر عنصر درون یک آرایه خواند. نقلقول دوتایی و `@' برای جلوگیری از حذف خطوط خالی ضروری هستند. توجه داشته باشید که اگر فایل با یک خط جدید به پایان برسد، پوسته روی خط جدید نهایی تفکیک انجام داده و یک فیلد خالی اضافی تولید میکند؛ این رفتار را میتوان با استفاده از عبارت `array=("${(f@)${mapfile[filename]%$'\n'}}")' مهار کرد.
محدودیتها (Limitations)
اگرچه خواندن و نوشتن فایل مربوطه با کارایی بالا انجام میشود، مدیریت حافظه درونی zsh ممکن است پیچیدگیهای خاص خود را داشته باشد؛ با این حال، mapfile معمولاً بسیار کارآمدتر از هر روش مبتنی بر حلقه است. به ویژه توجه داشته باشید که هنگام دسترسی، تمام محتوای فایل همیشه به صورت فیزیکی در حافظه قرار خواهد گرفت (احتمالاً چندین بار، به دلیل عملیات استاندارد جایگزینی پارامتر). به ویژه، این بدان معناست که مدیریت فایلهای به اندازه کافی بزرگ (بزرگتر از فضای swap سیستم، یا بزرگتر از دامنه نوع داده اشارهگر) با خطا مواجه خواهد شد.
هیچ خطایی برای فایلهای ناموجود، غیرقابل خواندن یا غیرقابل نوشتن چاپ یا پرچمگذاری نمیشود، زیرا سازوکار پارامتر در سلسلهمراتب اجرای پوسته در سطح بسیار پایینی قرار دارد که پیادهسازی این کار را دشوار میکند.
متأسفانه سازوکار بارگذاری ماژولها هنوز به کاربر اجازه نمیدهد نام پارامتر پوستهای را که قرار است این رفتار ویژه را داشته باشد تعیین کند.
ماژول ZSH/MATHFUNC (THE ZSH/MATHFUNC MODULE)
ماژول zsh/mathfunc توابع ریاضی استاندارد را برای استفاده در هنگام ارزیابی فرمولهای ریاضی فراهم میکند. ساختار دستوری با قراردادهای معمول C و FORTRAN مطابقت دارد، برای نمونه:
(( f = sin(0.3) ))
سینوس 0.3 را به پارامتر f اختصاص میدهد.
بیشتر توابع آرگومانهای ممیز شناور میپذیرند و یک مقدار ممیز شناور بازمیگردانند. با این حال، هرگونه تبدیل لازم از یا به نوع عدد صحیح به طور خودکار توسط پوسته انجام میشود. به جز atan با آرگومان دوم و توابع abs، int و float، تمام توابع همانطور که در صفحه راهنمای تابع C متناظر ذکر شده رفتار میکنند، مگر اینکه هر آرگومانی خارج از دامنه مجاز برای تابع مربوطه توسط پوسته شناسایی شده و خطا گزارش گردد.
توابع زیر یک آرگومان ممیز شناور منفرد دریافت میکنند: acos، acosh، asin، asinh، atan، atanh، cbrt، ceil، cos، cosh، erf، erfc، exp، expm1، fabs، floor، gamma، j0، j1، lgamma، log، log10، log1p، log2، logb، sin، sinh، sqrt، tan، tanh، y0، y1. تابع atan میتواند به صورت اختیاری آرگومان دوم نیز بپذیرد، که در این حالت مانند تابع C به نام atan2 رفتار میکند. تابع ilogb یک آرگومان ممیز شناور منفرد میگیرد، اما یک عدد صحیح بازمیگرداند.
تابع signgam هیچ آرگومانی نمیپذیرد و یک عدد صحیح برمیگرداند، که همان متغیر C با همین نام است که در gamma(3) شرح داده شده است. توجه داشته باشید که بنابراین تنها بلافاصله پس از فراخوانی gamma یا lgamma کاربرد دارد. همچنین توجه داشته باشید که `signgam()' و `signgam' عبارات متمایزی هستند.
توابع min، max و sum در این ماژول تعریف نشدهاند بلکه در تابع قابل بارگذاری خودکار zmathfunc قرار دارند که در بخش `Mathematical Functions' در zshcontrib(1) شرح داده شده است.
توابع زیر دو آرگومان ممیز شناور میپذیرند: copysign، fmod، hypot، nextafter.
توابع زیر یک آرگومان اول صحیح و یک آرگومان دوم ممیز شناور میپذیرند: jn، yn.
توابع زیر یک آرگومان اول ممیز شناور و یک آرگومان دوم صحیح میپذیرند: ldexp، scalb.
تابع abs نوع آرگومان منفرد خود را تبدیل نمیکند؛ قدر مطلق یک عدد ممیز شناور یا یک عدد صحیح را بازمیگرداند. توابع float و int به ترتیب آرگومانهای خود را به مقدار ممیز شناور یا عدد صحیح (با قطع اعشار) تبدیل میکنند.
توجه داشته باشید که تابع pow در C در ارزیابی ریاضی عادی به عنوان عملگر `**' در دسترس است و در اینجا ارائه نشده است.
تابع rand48 در صورتی در دسترس است که کتابخانه ریاضی سیستم شما تابع erand48(3) را داشته باشد. این تابع یک عدد شبهتصادفی ممیز شناور بین 0 و 1 برمیگرداند. این تابع یک آرگومان رشتهای اختیاری میپذیرد.
اگر آرگومان وجود نداشته باشد، هسته عدد تصادفی (seed) با سه بار فراخوانی تابع rand(3) مقداردهی اولیه میشود --- این کار همان اعداد تصادفی سه مقدار بعدی $RANDOM را تولید میکند.
اگر آرگومان ارائه شود، بیانگر نام یک پارامتر اسکالر است که هسته عدد تصادفی جاری در آن ذخیره خواهد شد. در اولین فراخوانی، مقدار باید شامل حداقل دوازده رقم هگزادسیمال باشد (بقیه رشته نادیده گرفته میشود)، یا اینکه هسته به همان شیوه فراخوانی rand48 بدون آرگومان مقداردهی خواهد شد. فراخوانیهای بعدی rand48(param) سپس هسته را در پارامتر param به عنوان رشتهای از دوازده رقم هگزادسیمال بدون پیشوند مبنا نگهداری میکنند. دنبالههای اعداد تصادفی برای پارامترهای مختلف کاملاً مستقل هستند، و همچنین از دنباله مورد استفاده در فراخوانیهای rand48 بدون آرگومان مستقل میباشند.
برای نمونه دستورات زیر را در نظر بگیرید:
print $(( rand48(seed) )) print $(( rand48() )) print $(( rand48(seed) ))
با فرض اینکه $seed وجود نداشته باشد، با اولین فراخوانی مقداردهی اولیه میشود. در فراخوانی دوم، هسته پیشفرض مقداردهی میشود؛ با این حال توجه داشته باشید که به دلیل ویژگیهای rand() همبستگی میان هستههای مورد استفاده برای این دو مقداردهی اولیه وجود دارد، بنابراین برای استفادههای امنتر باید هسته ۱۲ بایتی اختصاصی خود را تولید کنید. فراخوانی سوم به همان دنباله اعداد تصادفی مورد استفاده در فراخوانی نخست بازمیگردد، بدون آنکه تحت تأثیر rand48() میانی قرار گرفته باشد.
ماژول ZSH/NEARCOLOR (THE ZSH/NEARCOLOR MODULE)
ماژول zsh/nearcolor رنگهای مشخصشده با سهتاییهای هگزادسیمال را با نزدیکترین رنگ در پالتهای ۸۸ یا ۲۵۶ رنگی که به طور گسترده توسط شبیهسازهای ترمینال استفاده میشوند جایگزین میکند. به طور پیشفرض، هنگامی که رنگها با سهتاییهای هگزادسیمال مشخص میشوند کدهای فرار رنگ واقعی (true colour) ۲۴ بیتی تولید میشوند. این کدها توسط همه ترمینالها پشتیبانی نمیشوند. هدف این ماژول آسانتر کردن تعریف اولویتهای رنگی در قالبی است که بتواند در طیف وسیعی از شبیهسازهای ترمینال کار کند.
به جز رنگ پیشفرض، استاندارد ANSI برای کدهای اسکیپ ترمینال هشت رنگ فراهم میکند. صفت روشن (bright) این تعداد را به شانزده میرساند. این رنگهای پایه به دلیل پشتیبانی گسترده معمولاً در برنامههای ترمینال به کار میروند. پالتهای گسترشیافته ۸۸ و ۲۵۶ رنگ نیز متداول هستند و در حالی که شانزده رنگ اول تا حدی میان ترمینالها و پیکربندیهای مختلف تفاوت دارند، این پالتها مجموعهای به طور کلی یکنواخت و قابل پیشبینی از رنگها اضافه میکنند.
برای استفاده از ماژول zsh/nearcolor، تنها کافی است آن را بارگذاری کنید. پس از آن، هر زمان رنگی با سهتایی هگزادسیمال تعیین شود، با تکتک رنگهای موجود مقایسه شده و نزدیکترین رنگ انتخاب خواهد شد. شانزده رنگ نخست به دلیل غیرقابل پیشبینی بودن هرگز در این فرایند تطبیق داده نمیشوند.
تشخیص قابل اعتماد پشتیبانی از رنگ واقعی (true colour) در شبیهساز ترمینال امکانپذیر نیست. بنابراین توصیه میشود در بارگذاری ماژول zsh/nearcolor گزینشی عمل کنید. برای نمونه، دستور زیر متغیر محیطی COLORTERM را بررسی میکند:
[[ $COLORTERM = *(24bit|truecolor)* ]] || zmodload zsh/nearcolor
توجه داشته باشید که برخی از ترمینالها کدهای اسکیپ true color را میپذیرند اما آنها را به صورت درونی به یک پالت محدودتر نگاشت میکنند، به شیوهای مشابه ماژول zsh/nearcolor.
ماژول ZSH/NEWUSER (THE ZSH/NEWUSER MODULE)
ماژول zsh/newuser در هنگام راهاندازی سیستم در صورتی که در دسترس باشد، گزینه RCS فعال باشد و گزینه PRIVILEGED فعال نباشد (هر سه به طور پیشفرض برقرارند) بارگذاری میشود. این کار بلافاصله پس از اجرای دستورات موجود در فایل سراسری zshenv (معمولاً /etc/zsh/zshenv)، در صورت وجود، انجام میگیرد. اگر ماژول در دسترس نباشد، در سکوت توسط پوسته نادیده گرفته میشود؛ در صورت عدم نیاز، ماژول را میتوان با خیال راحت توسط مدیر سیستم از $MODULE_PATH حذف کرد.
پس از بارگذاری، ماژول بررسی میکند که آیا هیچیک از فایلهای راهاندازی .zshenv، .zprofile، .zshrc یا .zlogin در دایرکتوری ارائهشده توسط متغیر محیطی ZDOTDIR، یا دایرکتوری خانگی کاربر در صورت عدم تنظیم آن وجود دارند یا خیر. اگر پوسته در حالت شبیهسازی باشد (یعنی به عنوان پوستهای غیر از zsh فراخوانی شده باشد)، این بررسی انجام نشده و پردازش ماژول متوقف میشود.
اگر هیچیک از فایلهای راهاندازی یافت نشوند، ماژول سپس فایل newuser را ابتدا در یک دایرکتوری در سطح سیستم (معمولاً دایرکتوری والد دایرکتوری site-functions) جستجو میکند، و اگر پیدا نشد ماژول در یک دایرکتوری مختص نسخه (معمولاً والد دایرکتوری functions حاوی توابع مختص نسخه) به جستجو میپردازد. (این دایرکتوریها را میتوان هنگام ساخت zsh با استفاده از فلگهای --enable-site-scriptdir=dir و --enable-scriptdir=dir در دستور configure پیکربندی کرد؛ پیشفرضها به ترتیب prefix/share/zsh و prefix/share/zsh/$ZSH_VERSION هستند که در آن prefix پیشفرض /usr/local است.)
اگر فایل newuser یافت شود، به همان شیوه یک فایل راهاندازی سورس (source) میشود. انتظار میرود این فایل حاوی کدهایی برای نصب فایلهای راهاندازی برای کاربر باشد، با این حال هر کد معتبر پوسته اجرا خواهد شد.
سپس ماژول zsh/newuser بدون قید و شرط از حافظه تخلیه (unload) میشود.
توجه داشته باشید که میتوان با افزودن کد به /etc/zsh/zshenv دقیقاً به همان اثر ماژول zsh/newuser دست یافت. این ماژول صرفاً به منظور امکانپذیر ساختن تمهیدات لازم برای کاربران جدید توسط پوسته بدون نیاز به مداخله نگهدارندگان بستهها و مدیران سیستم وجود دارد.
اسکریپت ارائهشده همراه با این ماژول تابع پوسته zsh-newuser-install را فراخوانی میکند. این تابع میتواند حتی در صورت غیرفعال بودن ماژول zsh/newuser مستقیماً توسط کاربر فراخوانی شود. با این حال توجه داشته باشید که در صورت عدم نصب ماژول، این تابع نیز نصب نخواهد شد. این تابع در بخش `User Configuration Functions' در zshcontrib(1) مستند شده است.
ماژول ZSH/PARAMETER (THE ZSH/PARAMETER MODULE)
ماژول zsh/parameter با تعریف برخی پارامترهای ویژه، امکان دسترسی به برخی از جدولهای درهمسازی (hash tables) درونی مورد استفاده پوسته را فراهم میکند.
- options
- کلیدهای این آرایه انجمنی، نام گزینههایی است که میتوان آنها را با استفاده از دستورات توکار setopt و unsetopt تنظیم یا لغو کرد. مقدار هر کلید در صورتی که گزینه در حال حاضر فعال باشد رشته on، و در صورت غیرفعال بودن رشته off است. تنظیم یک کلید روی یکی از این رشتهها به ترتیب معادل فعالسازی یا غیرفعالسازی آن گزینه است. لغو مقداردهی (unset) یک کلید در این آرایه همانند تنظیم آن روی مقدار off خواهد بود.
- commands
- این آرایه امکان دسترسی به جدول درهمسازی دستورها را فراهم میکند. کلیدها نام دستورهای خارجی هستند، و مقادیر، مسیرهای فایلهایی میباشند که هنگام فراخوانی دستور اجرا خواهند شد. تنظیم یک کلید در این آرایه، یک مدخل جدید در این جدول ایجاد میکند، دقیقاً مانند دستور توکار hash. لغو مقداردهی یک کلید مانند `unset "commands[foo]"' مدخل مربوط به آن کلید را از جدول درهمسازی دستورات حذف میکند.
- functions
- این آرایه انجمنی نام توابع فعال را به تعاریف بدنه آنها نگاشت میکند. تنظیم یک کلید در آن، مانند تعریف تابعی با نام دادهشده توسط کلید و بدنه دادهشده توسط مقدار است. لغو مقداردهی یک کلید، تعریف تابع با آن نام را حذف میکند.
- dis_functions
- مشابه functions، اما برای توابع غیرفعالشده.
- functions_source
- این آرایه انجمنی فقطخواندنی، نام توابع فعال را به نام فایلی که حاوی سورس آن تابع است نگاشت میکند.
برای تابع بارگذاریشونده خودکاری (autoloaded) که پیشتر بارگذاری شده، یا با یک مسیر مطلق برای بارگذاری خودکار علامتگذاری شده، یا مسیر آن با `functions -r' تفکیک شده است، این مقدار همان فایل یافتشده برای بارگذاری خودکار است که به یک مسیر مطلق تبدیل شده است.
برای تابعی که درون بدنه یک اسکریپت یا فایل سورسشده تعریف شده باشد، این مقدار نام همان فایل است. در این حالت، مقدار دقیقاً همان مسیری است که در اصل برای آن فایل استفاده شده بود و ممکن است یک مسیر نسبی باشد.
برای هر تابع دیگری، از جمله هر تابعی که در اعلان تعاملی تعریف شده باشد یا یک تابع autoload که هنوز مسیر آن تفکیک نشده است، مقدار یک رشته خالی خواهد بود. با این حال، تا زمانی که تابع حضور دارد مدخل درهمسازی به صورت تعریفشده گزارش میشود: کلیدهای این جدول مشابه کلیدهای $functions هستند.
- dis_functions_source
- مشابه functions_source، اما برای توابع غیرفعالشده.
- builtins
- این آرایه انجمنی اطلاعاتی درباره دستورات توکار در حال حاضر فعال ارائه میدهد. کلیدها نام دستورات توکار هستند و مقادیر در صورتی که دستور توکار هنگام فراخوانی به طور خودکار از یک ماژول بارگذاری شود `undefined' و برای دستورات توکاری که از قبل بارگذاری شدهاند `defined' است.
- dis_builtins
- مشابه builtins، اما برای دستورات توکار غیرفعالشده.
- reswords
- این آرایه حاوی کلمات کلیدی رزروشده فعال است.
- dis_reswords
- مشابه reswords، اما برای کلمات کلیدی رزروشده غیرفعال.
- patchars
- این آرایه حاوی نویسههای الگوی تطابق (pattern characters) فعال است.
- dis_patchars
- مشابه patchars، اما برای نویسههای الگوی غیرفعال.
- aliases
- این آرایه نام نامهای مستعار (alias) معمولی فعال را به عبارت بسطیافته آنها نگاشت میکند.
- dis_aliases
- مشابه aliases، اما برای نامهای مستعار معمولی غیرفعال.
- galiases
- مشابه aliases، اما برای نامهای مستعار سراسری (global aliases).
- dis_galiases
- مشابه galiases، اما برای نامهای مستعار سراسری غیرفعال.
- saliases
- مشابه raliases، اما برای نامهای مستعار پسوندی (suffix aliases).
- dis_saliases
- مشابه saliases، اما برای نامهای مستعار پسوندی غیرفعال.
- parameters
- کلیدهای این آرایه انجمنی نام پارامترهایی هستند که در حال حاضر تعریف شدهاند. مقادیر، رشتههایی در توصیف نوع پارامتر هستند، در همان قالبی که توسط پرچم پارامتر t استفاده میشود؛ راهنمای zshexpn(1) را ببینید. تنظیم یا لغو مقداردهی کلیدها در این آرایه امکانپذیر نیست.
- modules
- آرایه انجمنی حاوی اطلاعاتی پیرامون ماژولها. کلیدها نام ماژولهای بارگذاریشده، ثبتشده برای بارگذاری خودکار، یا نام مستعار دادهشده هستند. مقدار نشان میدهد که ماژول در چه وضعیتی قرار دارد و یکی از رشتههای `loaded'، `autoloaded' یا `alias:name' است، که در آن name نامی است که ماژول به آن ارجاع داده شده است.
تنظیم یا لغو مقداردهی کلیدها در این آرایه امکانپذیر نیست.
- dirstack
- یک آرایه معمولی حاوی عناصر پشته دایرکتوریها (directory stack). توجه داشته باشید که خروجی دستور توکار dirs شامل یک دایرکتوری بیشتر، یعنی دایرکتوری کاری فعلی است.
- history
- این آرایه انجمنی شماره رویدادهای تاریخچه را به خطوط کامل تاریخچه نگاشت میکند. اگرچه به عنوان یک آرایه انجمنی ارائه شده است، اما آرایه تمام مقادیر (${history[@]}) تضمین میشود که به ترتیب از جدیدترین به قدیمیترین رویداد تاریخچه، یعنی با کاهش شماره رویداد تاریخچه، بازگردانده شود.
- historywords
- یک آرایه ویژه حاوی کلمات ذخیرهشده در تاریخچه. این کلمات نیز به ترتیب از جدیدترین به قدیمیترین ظاهر میشوند.
- jobdirs
- این آرایه انجمنی شماره شغلها (jobs) را به دایرکتوریهایی که شغل از آنها آغاز شده است نگاشت میکند (که ممکن است دایرکتوری جاری شغل نباشد).
کلیدهای آرایه انجمنی معمولاً شمارههای معتبر شغلها هستند، و اینها همان مقادیری هستند که برای نمونه با ${(k)jobdirs} خروجی داده میشوند. هنگام جستجوی یک مقدار میتوان از ارجاعات غیرعددی شغل نیز استفاده کرد؛ برای مثال، ${jobdirs[%+]} به شغل جاری اشاره دارد.
برای آگاهی از نحوه ارائه اطلاعات شغل در یک زیرپوسته، به توضیحات دستور توکار jobs مراجعه کنید.
- jobtexts
- این آرایه انجمنی شماره شغلها را به متن خطوط فرمانی که برای شروع آن شغلها استفاده شده نگاشت میکند.
مدیریت کلیدهای این آرایه انجمنی همانند توضیحات ارائهشده برای jobdirs در بالا است.
برای چگونگی ارائه اطلاعات شغل در زیرپوسته، به دستور توکار jobs مراجعه کنید.
- jobstates
- این آرایه انجمنی اطلاعاتی درباره وضعیت شغلهای شناختهشده فعلی ارائه میدهد. کلیدها شماره شغلها و مقادیر رشتههایی به صورت `job-state:mark:pid=state...' هستند. بخش job-state وضعیت کل شغل را نشان میدهد که یکی از مقادیر `running'، `suspended' یا `done' است. علامت mark برای شغل جاری برابر `+'، برای شغل قبلی برابر `-' و در غیر این صورت خالی است. به دنبال آن یک عبارت `:pid=state' برای هر پردازش در آن شغل میآید. شناسههای pid همان شناسههای پردازش هستند و state وضعیت آن پردازش را شرح میدهد.
مدیریت کلیدهای این آرایه انجمنی مشابه توضیحات jobdirs در بالا است.
برای نحوه ارائه اطلاعات شغل در یک زیرپوسته، دستور توکار jobs را ببینید.
- nameddirs
- این آرایه انجمنی نام دایرکتوریهای نامگذاریشده را به مسیرهایی که معرف آنها هستند نگاشت میکند.
- userdirs
- این آرایه انجمنی نامهای کاربری را به مسیرهای دایرکتوریهای خانگی آنها نگاشت میکند.
- usergroups
- این آرایه انجمنی نام گروههای سیستمی را که کاربر جاری عضو آنها است به شناسههای عددی گروه متناظر نگاشت میکند. محتوای آن مشابه گروههای نمایشدادهشده توسط دستور id است.
- funcfiletrace
- این آرایه حاوی شماره سطرهای مطلق و نام فایلهای متناظری است که در آن تابع جاری، فایل سورسشده، یا (اگر EVAL_LINENO تنظیم باشد) دستور eval فراخوانی شده است. طول این آرایه با funcsourcetrace و functrace یکسان است، اما با funcsourcetrace از این نظر تفاوت دارد که سطر و فایل، نقطه فراخوانی هستند و نه نقطه تعریف، و با functrace نیز از این جهت تفاوت دارد که تمام مقادیر، شماره سطرهای مطلق درون فایلها هستند و نه نسبت به ابتدای یک تابع.
- funcsourcetrace
- این آرایه شامل نام فایلها و شماره سطرهایی است که توابع، فایلهای سورسشده و (در صورت تنظیم EVAL_LINENO) دستورات eval در حال اجرای فعلی در آنجا تعریف شدهاند. شماره سطر همان سطری است که در آن `function name' یا `name ()' آغاز شده است. در مورد توابع autoload، شماره سطر برابر صفر گزارش میشود. قالب هر عنصر به صورت filename:lineno است.
برای توابعی که از یک فایل با قالب بومی zsh بارگذاری شدهاند و فقط بدنه تابع در فایل قرار دارد، یا برای فایلهایی که با دستورات توکار source یا `.' اجرا شدهاند، اطلاعات ردگیری به صورت filename:0 نمایش داده میشود، زیرا کل فایل همان تعریف است. نام فایل سورس هنگام بارگذاری تابع یا تفکیک مسیر آن، به یک مسیر مطلق تبدیل میگردد.
بیشتر کاربران در عوض به اطلاعات موجود در آرایه funcfiletrace علاقهمند خواهند بود.
- funcstack
- این آرایه حاوی نام توابع، فایلهای سورسشده و (در صورت تنظیم بودن EVAL_LINENO) دستورات eval در حال اجرای جاری است. اولین عنصر نام تابعی است که از این پارامتر استفاده میکند.
آرایه استاندارد پوسته zsh_eval_context میتواند برای تعیین نوع ساختار پوستهای در حال اجرا در هر عمق به کار رود: توجه داشته باشید که این آرایه به ترتیب معکوس است و جدیدترین مورد در انتهای آن قرار دارد، و همچنین دارای جزئیات بیشتری است، به عنوان مثال مدخلی برای toplevel دارد که کد اصلی پوسته در حال اجرا به صورت تعاملی یا از طریق اسکریپت است و در $funcstack حضور ندارد.
- functrace
- این آرایه شامل نامها و شماره خطوط فراخوانهای متناظر با توابع در حال اجرای جاری است. قالب هر عنصر به صورت name:lineno میباشد. فراخوانها برای فایلهای سورسشده نیز نمایش داده میشوند؛ فراخوان نقطهای است که دستور source یا `.' در آن اجرا شده است.
ماژول ZSH/PCRE (THE ZSH/PCRE MODULE)
ماژول zsh/pcre برخی دستورات را به عنوان دستور توکار در دسترس قرار میدهد:
- pcre_compile [ -aimxs ] PCRE
- یک عبارت منظم سازگار با پرل (PCRE) را کامپایل میکند.
گزینه -a الگو را مهارشده (anchored) میکند. گزینه -i الگو را حساس به بزرگ و کوچکی حروف نمیکند (case-insensitive). گزینه -m الگو را چندخطی کامپایل میکند؛ یعنی ^ و $ با خطوط جدید درون الگو مطابقت خواهند داشت. گزینه -x یک الگوی گسترشیافته کامپایل میکند که در آن فاصلههای خالی و یادداشتهای # نادیده گرفته میشوند. گزینه -s باعث میشود متاکاراکتر نقطه با تمام نویسهها، از جمله نویسههای نشاندهنده خط جدید مطابقت پیدا کند.
- pcre_study
- عبارت PCRE از پیش کامپایلشده را مورد تحلیل قرار میدهد که ممکن است به تطابق سریعتر بینجامد.
- pcre_match [ -v var ] [ -a arr ] [ -n offset ] [ -b ] string
- در صورتی که string با PCRE پیشتر کامپایلشده مطابقت داشته باشد، با موفقیت بازمیگردد.
در صورت تطابق موفق، اگر عبارت زیررشتههایی را درون پرانتز جذب کند، pcre_match آرایه match را برابر با آن زیررشتهها قرار میدهد، مگر اینکه گزینه -a داده شده باشد که در این صورت آرایه arr را تنظیم میکند. به طور مشابه، متغیر MATCH روی کل بخش تطبیقیافته رشته تنظیم میشود، مگر اینکه گزینه -v داده شده باشد که در آن حالت متغیر var مقداردهی میگردد. در صورت عدم تطابق موفق هیچ متغیری تغییر نمیکند. گزینه -n جستجو برای تطابق را از موقعیت بایتی offset در string آغاز میکند. اگر گزینه -b داده شود، متغیر ZPCRE_OP روی رشتهای شامل یک جفت آفست تنظیم میشود که بیانگر موقعیتهای آفست بایتی کل بخش تطبیقیافته درون string است. به عنوان مثال، اگر ZPCRE_OP روی "32 45" تنظیم شود نشان میدهد بخش تطبیقیافته از آفست بایتی 32 آغاز شده و در آفست بایتی 44 پایان یافته است. در اینجا، موقعیت آفست بایتی 45 موقعیت بلافاصله پس از بخش تطبیقیافته است. به یاد داشته باشید که موقعیت بایتی در زمان وجود نویسههای UTF-8 لزوماً با موقعیت نویسهای یکسان نیست. در نتیجه، موقعیتهای آفست بایتی تنها در بستر استفاده از آنها برای جستجوهای بعدی روی string با استفاده از موقعیت آفست به عنوان آرگومان گزینه -n قابل اتکا هستند. این قابلیت عمدتاً برای پیادهسازی عملکرد «یافتن تمام تطابقهای غیرهمپوشان» به کار میرود.
نمونهای ساده از «یافتن تمام تطابقهای غیرهمپوشان»:
string="The following zip codes: 78884 90210 99513"
pcre_compile -m "\d{5}"
accum=()
pcre_match -b -- $string
while [[ $? -eq 0 ]] do
b=($=ZPCRE_OP)
accum+=$MATCH
pcre_match -b -n $b[2] -- $string
done
print -l $accum
ماژول zsh/pcre شرط آزمون زیر را در دسترس قرار میدهد:
- expr -pcre-match pcre
- یک رشته را با یک عبارت منظم سازگار با پرل تطبیق میدهد.
برای نمونه:
[[ "$text" -pcre-match ^d+$ ]] && print text variable contains only "d's".
اگر گزینه REMATCH_PCRE تنظیم شده باشد، عملگر =~ معادل -pcre-match خواهد بود، و گزینه NO_CASE_MATCH میتواند استفاده شود. توجه داشته باشید که NO_CASE_MATCH هرگز بر دستور توکار pcre_match اعمال نمیشود، و در عوض باید از سوییچ -i در pcre_compile استفاده کرد.
ماژول ZSH/PARAM/PRIVATE (THE ZSH/PARAM/PRIVATE MODULE)
ماژول zsh/param/private برای ایجاد پارامترهایی استفاده میشود که حوزه (scope) آنها محدود به بدنه تابع فعلی است، و نه به سایر توابعی که توسط تابع جاری فراخوانی میشوند.
این ماژول یک دستور توکار autoload منفرد ارائه میدهد:
- private [ {+|-}AHUahlmrtux ] [ {+|-}EFLRZi [ n ] ] [ name[=value] ... ]
- دستور توکار private همه گزینهها و آرگومانهای مشابه local (zshbuiltins(1)) را میپذیرد به استثنای گزینه `-T'. پارامترهای متصلشده (tied) را نمیتوان خصوصی کرد.
گزینه `-p' در حال حاضر هیچ عملی انجام نمیدهد (no-op) زیرا وضعیت پارامترهای خصوصی را نمیتوان به شکل قابل اعتمادی دوباره بارگذاری کرد. این مورد در چاپ پارامترهای خصوصی با `typeset -p' نیز صدق میکند.
اگر در بالاترین سطح (خارج از دامنه تابع) استفاده شود، private یک پارامتر معمولی ایجاد میکند دقیقاً به همان روش declare یا typeset. اگر گزینه WARN_CREATE_GLOBAL تنظیم شده باشد (zshoptions(1))، هشداری در این خصوص چاپ میشود. هنگام استفاده در حوزه یک تابع، private یک پارامتر محلی مشابه پارامتر اعلانشده با local ایجاد میکند، با این تفاوت که دارای ویژگیهای ویژه ذکرشده در زیر است.
پارامترهای ویژهای که وضعیت درونی پوسته را آشکار یا دستکاری میکنند، نظیر ARGC، argv، COLUMNS، LINES، UID، EUID، IFS، PROMPT، RANDOM، SECONDS و غیره را نمیتوان خصوصی ساخت مگر آنکه از گزینه `-h' برای پنهان کردن معنای ویژه پارامتر استفاده شود. این موضوع ممکن است در آینده تغییر کند.
همانند سایر دستورات معادل typeset، دستور private هم یک دستور توکار و هم یک کلمه کلیدی رزروشده است، بنابراین آرایهها را میتوان با ساختار دستوری فهرست کلمات داخل پرانتز name=(value...) مقداردهی کرد. با این حال کلمه رزروشده `private' تا پیش از بارگذاری zsh/param/private در دسترس نیست، بنابراین باید در ترتیب اجرا و تجزیه برای تعاریف توابعی که از private استفاده میکنند دقت شود. برای جبران این موضوع، ماژول همچنین گزینه `-P' را به دستور توکار `local' برای اعلان پارامترهای خصوصی اضافه میکند.
برای نمونه، در صورتی که zsh/param/private هنوز هنگام تعریف `bad_declaration' بارگذاری نشده باشد، این ساختار با شکست روبرو میشود:
bad_declaration() {
zmodload zsh/param/private
private array=( one two three )
}
این ساختار کار میکند زیرا local از قبل یک کلمه کلیدی است، و ماژول پیش از اجرای عبارت بارگذاری میشود:
good_declaration() {
zmodload zsh/param/private
local -P array=( one two three )
}
کد زیر در اسکریپتها قابل استفاده است اما ممکن است با autoload دچار مشکل شود:
zmodload zsh/param/private
iffy_declaration() {
private array=( one two three )
}
دستور توکار private همواره میتواند برای تخصیصهای اسکالر و برای اعلانهای بدون تخصیص مقدار استفاده شود.
پارامترهای اعلانشده با private ویژگیهای زیر را دارا هستند:
- •
- درون بدنه تابعی که پارامتر در آن اعلان شده است، همانند یک متغیر local رفتار میکند، مگر در موارد ذکرشده در بالا برای پارامترهای وابسته یا ویژه.
- •
- نوع پارامتری که خصوصی اعلان شده است را نمیتوان در دامنهای که در آن اعلان شده تغییر داد، حتی اگر پارامتر لغو مقداردهی شود. بنابراین یک آرایه را نمیتوان به یک متغیر اسکالر خصوصی تخصیص داد و غیره.
- •
- درون هر تابع دیگری که توسط تابع اعلانکننده فراخوانی شود، پارامتر خصوصی پارامترهای دیگر با همان نام را پنهان نمیکند؛ بنابراین برای نمونه یک پارامتر سراسری با همان نام قابل مشاهده بوده و میتواند مقداردهی یا لغو شود. این مورد شامل فراخوانی توابع ناشناس نیز میشود، هرچند ممکن است این رفتار در آینده تغییر کند. با این حال، نام خصوصی را نمیتوان در خارج از دامنه محلی در صورتی که قبلاً اعلان نشده باشد ایجاد کرد.
- •
- یک پارامتر خصوصی صادرشده (exported) در محیط دامنههای درونی باقی میماند اما برای پوسته جاری در آن دامنهها لغوشده به نظر میرسد. به طور کلی باید از صدور پارامترهای خصوصی خودداری شود.
توجه داشته باشید که این ویژگی با حوزه ایستا (static scope) تعریفشده در زبانهای کامپایلری مشتق از C تفاوت دارد، زیرا یک فراخوانی جدید به همان تابع دامنهای جدید ایجاد میکند، یعنی پارامتر همچنان با پشته فراخوانی مرتبط است و نه با تعریف تابع. همچنین با `typeset -S' در ksh تفاوت دارد زیرا نحو مورد استفاده برای تعریف تابع ارتباطی با رعایت شدن حوزه پارامتر ندارد.
ماژول ZSH/REGEX (THE ZSH/REGEX MODULE)
ماژول zsh/regex شرط آزمون زیر را در دسترس قرار میدهد:
- expr -regex-match regex
- یک رشته را با یک عبارت منظم گسترشیافته POSIX تطبیق میدهد. در صورت تطابق موفقیتآمیز، بخش تطبیقیافته رشته معمولاً در متغیر MATCH قرار میگیرد. اگر هرگونه پرانتز جذبی در عبارت منظم وجود داشته باشد، متغیر آرایهای match حاوی آنها خواهد بود. اگر تطابق موفق نباشد، متغیرها تغییر نخواهند کرد.
برای نمونه:
[[ alphabetical -regex-match ^a([^a]+)a([^a]+)a ]] && print -l $MATCH X $match
اگر گزینه REMATCH_PCRE تنظیم نشده باشد، عملگر =~ در صورت نیاز این ماژول را به طور خودکار بارگذاری کرده و عملگر -regex-match را فراخوانی میکند.
اگر BASH_REMATCH تنظیم شده باشد، آرایه BASH_REMATCH به جای MATCH و match تنظیم خواهد شد.
توجه داشته باشید که منطق ماژول zsh/regex به سیستم میزبان متکی است. اگر یک regex با ساختار غیر استاندارد داده شود، همان جفت expr و regex میتواند نتایج متفاوتی در پلتفرمهای مختلف ایجاد کند.
برای مثال هیچ ساختاری برای تطابق مرز کلمه در استاندارد عبارات منظم گسترشیافته POSIX تعریف نشده است. GNU libc و BSD libc هر دو چنین ساختارهایی را به عنوان افزونه ارائه میدهند (به ترتیب \b و [[:<:]]/[[:>:]])، اما هیچیک از این ساختارها در هر دوی این پیادهسازیها پشتیبانی نمیشود.
برای ساختارهای پشتیبانیشده به صورت محلی در سیستم خود، به صفحات راهنمای regcomp(3) و re_format(7) مراجعه فرمایید.
ماژول ZSH/SCHED (THE ZSH/SCHED MODULE)
ماژول zsh/sched یک دستور توکار و یک پارامتر را در دسترس قرار میدهد.
- sched [-o] [+]hh:mm[:ss] command ...
- sched [-o] [+]seconds command ...
- sched [ -item ]
- یک مدخل در فهرست زمانبندیشده دستورها برای اجرا ایجاد میکند. زمان را میتوان به صورت زمان مطلق یا نسبی، و یا به صورت ساعت، دقیقه و (اختیاری) ثانیه جداشده با دونقطه، یا صرفاً برحسب ثانیه تعیین کرد. یک عدد مطلق از ثانیهها نشاندهنده زمان سپریشده از مبدأ زمانی (1970/01/01 00:00) است؛ این ویژگی در ترکیب با قابلیتهای ماژول zsh/datetime مفید است؛ مدخل ماژول zsh/datetime را در zshmodules(1) ببینید.
بدون آرگومان، فهرست دستورهای زمانبندیشده را چاپ میکند. اگر دستور زمانبندیشده دارای پرچم -o باشد، این مورد در ابتدای دستور نشان داده میشود.
با آرگومان `-item'، آیتم مشخصشده را از فهرست حذف میکند. شمارهگذاری فهرست پیوسته است و مدخلها بر حسب ترتیب زمانی مرتب شدهاند، بنابراین با اضافه یا حذف شدن مدخلها شمارهگذاری ممکن است تغییر کند.
دستورها یا بلافاصله پیش از یک اعلان یا در زمانی که ویرایشگر خط پوسته منتظر ورودی است اجرا میشوند. در حالت دوم، تولید خروجی بدون ایجاد اختلال در خط در حال ویرایش اهمیت دارد. ارائه گزینه -o باعث میشود پوسته پیش از رویداد خط فرمان را پاک کرده و پس از آن مجدداً رسم کند. این گزینه باید برای هر رویداد زمانبندیشدهای که خروجی قابل مشاهده در ترمینال تولید میکند استفاده شود؛ برای نمونه در خروجیهایی که نوار عنوان شبیهساز ترمینال را بهروزرسانی میکنند نیازی به آن نیست.
برای اعمال تغییرات در بافر ویرایشگر هنگام اجرای رویداد، از دستور `zle' بدون آرگومان برای آزمایش فعال بودن ویرایشگر استفاده کنید، و اگر فعال بود، از `zle widget' برای دسترسی به ویرایشگر از طریق widget نامگذاریشده بهره ببرید.
دستور توکار sched در حالتی که پوسته در وضعیت شبیهسازی پوسته دیگری آغاز به کار کند به طور پیشفرض در دسترس نیست. میتوان آن را با دستور `zmodload -F zsh/sched b:sched' در دسترس قرار داد.
- zsh_scheduled_events
- یک آرایه فقطخواندنی متناظر با رویدادهای زمانبندیشده توسط دستور توکار sched. اندیسهای آرایه متناظر با شمارههایی است که هنگام اجرای sched بدون آرگومان نمایش داده میشوند (به شرطی که گزینه KSH_ARRAYS تنظیم نشده باشد). مقدار آرایه شامل زمان زمانبندیشده برحسب ثانیه از مبدأ زمانی (برای امکانات استفاده از این عدد، بخش `The zsh/datetime Module' را ببینید)، به دنبال آن یک دونقطه، به دنبال آن هرگونه گزینه (که ممکن است خالی باشد اما در غیر این صورت با `-' همراه خواهد بود)، به دنبال آن یک دونقطه، و سپس دستور مورد نظر برای اجرا است.
از دستور توکار sched باید برای دستکاری و مدیریت این رویدادها استفاده شود. توجه داشته باشید که این کار تأثیر فوری بر محتوای آرایه خواهد داشت، بنابراین اندیسها ممکن است نامعتبر شوند.
ماژول ZSH/NET/SOCKET (THE ZSH/NET/SOCKET MODULE)
ماژول zsh/net/socket یک دستور توکار در دسترس قرار میدهد:
- zsocket [ -altv ] [ -d fd ] [ args ]
- دستور zsocket به صورت یک دستور توکار پیادهسازی شده است تا امکان استفاده کامل از ویرایش خط فرمان پوسته، ورودی/خروجی فایل، و سازوکارهای کنترل شغل را فراهم کند.
اتصالهای خروجی (Outbound Connections)
- zsocket [ -v ] [ -d fd ] filename
- یک اتصال جدید در دامنه یونیکس به filename باز میکند. پارامتر پوستهای REPLY روی توصیفکننده فایل مرتبط با آن اتصال تنظیم خواهد شد. در حال حاضر، تنها اتصالهای جریانی (stream connections) پشتیبانی میشوند.
اگر -d تعیین شود، آرگومان آن به عنوان توصیفکننده فایل هدف برای اتصال در نظر گرفته میشود.
برای دریافت خروجی با جزئیات بیشتر، از -v استفاده کنید.
هنگامی که دیگر نیازی به توصیفکنندههای فایل نباشد، میتوان آنها را با نحو معمول پوسته بست، به عنوان مثال:
exec {REPLY}>&-
اتصالهای ورودی (Inbound Connections)
- zsocket -l [ -v ] [ -d fd ] filename
- دستور zsocket -l یک سوکت شنونده روی filename باز میکند. پارامتر پوستهای REPLY روی توصیفکننده فایل متناظر با آن شنونده تنظیم خواهد شد. این توصیفکننده فایل در زیرپوستهها و فایلهای اجرایی خارجی منشعبشده باز میماند.
اگر -d تعیین شود، آرگومان آن به عنوان توصیفکننده فایل هدف برای اتصال لحاظ میگردد.
جهت دریافت خروجی با جزئیات بیشتر، از -v استفاده کنید.
- zsocket -a [ -tv ] [ -d targetfd ] listenfd
- دستور zsocket -a یک اتصال ورودی به سوکت مرتبط با listenfd را میپذیرد. پارامتر پوستهای REPLY روی توصیفکننده فایل مرتبط با اتصال ورودی تنظیم خواهد شد. این توصیفکننده فایل در زیرپوستهها و برنامههای اجرایی خارجی منشعب باز میماند.
اگر -d مشخص شود، آرگومان آن به عنوان توصیفکننده فایل مقصد برای اتصال تلقی خواهد شد.
اگر -t مشخص شده باشد، در صورتی که هیچ اتصال ورودی در انتظار نباشد، zsocket بلافاصله بازمیگردد. در غیر این صورت منتظر یک اتصال خواهد ماند.
برای دریافت خروجی با جزئیات بیشتر، از -v استفاده کنید.
ماژول ZSH/STAT (THE ZSH/STAT MODULE)
ماژول zsh/stat یک دستور توکار را تحت دو نام ممکن در دسترس قرار میدهد:
- zstat [ -gnNolLtTrs ] [ -f fd ] [ -H hash ] [ -A array ] [ -F fmt ]
- [ +element ] [ file ... ]
- stat ...
- این دستور به عنوان یک رابط برای فراخوانی سیستمی stat عمل میکند (راهنمای stat(2) را ببینید). همین دستور با دو نام ارائه شده است؛ از آنجا که نام stat اغلب توسط یک دستور خارجی استفاده میشود، توصیه میشود تنها از صورت zstat این دستور استفاده شود. این کار را میتوان با بارگذاری ماژول با دستور `zmodload -F zsh/stat b:zstat' هماهنگ کرد.
اگر فراخوانی stat با شکست مواجه شود، پیام خطای سیستمی مناسب چاپ شده و وضعیت 1 بازگردانده میشود. فیلدهای ساختار struct stat اطلاعاتی درباره فایلهای ارائهشده به عنوان آرگومان به دستور فراهم میکنند. علاوه بر فیلدهای موجود در فراخوانی stat، یک عنصر اضافی به نام `link' نیز فراهم شده است. این عناصر عبارتند از:
- device
- شماره دستگاهی که فایل روی آن قرار دارد.
- inode
- شماره منحصربهفرد فایل روی این دستگاه (شماره `inode').
- mode
- حالت دسترسی فایل؛ یعنی نوع فایل و مجوزهای دسترسی آن. با گزینه -s، این مقدار به صورت رشتهای متناظر با ستون اول نمایش دستور ls -l بازگردانده میشود.
- nlink
- تعداد پیوندهای سخت به فایل.
- uid
- شناسه کاربری مالک فایل. با گزینه -s، این مقدار به صورت نام کاربری نمایش داده میشود.
- gid
- شناسه گروه فایل. با گزینه -s، به صورت نام گروه نمایش داده میشود.
- rdev
- شماره دستگاه خام. این مقدار فقط برای دستگاههای خاص مفید است.
- size
- اندازه فایل برحسب بایت.
- atime
- mtime
- ctime
- به ترتیب زمانهای آخرین دسترسی، آخرین تغییر محتوا، و آخرین تغییر اینود فایل، به صورت تعداد ثانیههای سپریشده از نیمهشب اول ژانویه ۱۹۷۰ برحسب گرینویچ (GMT). با گزینه -s، این زمانها به عنوان رشتههایی برای منطقه زمانی محلی چاپ میشوند؛ قالب نمایش را میتوان با گزینه -F تغییر داد، و با گزینه -g زمانها بر مبنای GMT خواهند بود.
- blksize
- تعداد بایتهای موجود در یک بلوک تخصیص روی دستگاهی که فایل در آن مستقر است.
- block
- تعداد بلوکهای دیسک مورد استفاده فایل.
- link
- اگر فایل یک پیوند باشد و گزینه -L اعمال شده باشد، این فیلد شامل نام فایلی است که به آن پیوند داده شده است، در غیر این صورت خالی خواهد بود. توجه داشته باشید که در صورت انتخاب این عنصر (``zstat +link'')، گزینه -L به طور خودکار فعال میشود.
یک عنصر خاص را میتوان با درج نام آن همراه با یک علامت `+' در فهرست گزینهها انتخاب کرد؛ تنها یک عنصر مجاز است. نام عنصر را میتوان به هر مجموعه منحصربهفردی از نویسههای ابتدایی آن خلاصه کرد. در غیر این صورت، تمام عناصر برای تمام فایلها نمایش داده خواهند شد.
گزینهها:
- -A array
- به جای نمایش نتایج در خروجی استاندارد، آنها را به یک array تخصیص میدهد، به این صورت که برای هر فایل به ترتیب یک عنصر از struct stat در هر عنصر آرایه قرار میگیرد. در این حالت نه نام عنصر و نه نام فایلها در array ظاهر نمیشوند، مگر اینکه به ترتیب گزینههای -t یا -n داده شده باشند. اگر -t داده شود، نام عنصر به عنوان پیشوند به عنصر مربوطه آرایه اضافه میشود؛ اگر -n داده شود، نام فایل به عنوان یک عنصر جداگانه در آرایه قبل از بقیه عناصر قرار میگیرد. سایر گزینههای قالببندی رعایت میشوند.
- -H hash
- مشابه -A، اما مقادیر را به یک جدول درهمسازی (آرایه انجمنی) hash تخصیص میدهد. کلیدها همان عناصر ذکرشده در بالا هستند. اگر گزینه -n ارائه شود، نام فایل با کلید name در جدول درهمسازی گنجانده میشود.
- -f fd
- از فایل متصل به توصیفکننده فایل fd به جای فایلهای نامگذاریشده استفاده میکند؛ در این حالت فهرستی از نام فایلها مجاز نیست.
- -F fmt
- یک رشته قالب strftime (راهنمای strftime(3) را ببینید) برای قالببندی عناصر زمانی فراهم میکند. رشته قالب از تمام افزونههای zsh شرحدادهشده در بخش EXPANSION OF PROMPT SEQUENCES در zshmisc(1) پشتیبانی میکند. به ویژه، -F %s.%N میتواند برای نمایش زمان با دقت نانوثانیه در صورت پشتیبانی سیستم به کار رود. گزینه -s به طور ضمنی فعال میشود.
- -g
- عناصر زمانی را در منطقه زمانی گرینویچ (GMT) نشان میدهد. گزینه -s به صورت ضمنی اعمال میشود.
- -l
- نام عناصر نوع را (بسته به مورد در خروجی استاندارد یا یک آرایه) فهرست کرده و بلافاصله بازمیگردد؛ آرگومانها و گزینههایی غیر از -A نادیده گرفته میشوند.
- -L
- به جای فراخوانی سیستمی stat، فراخوانی lstat (راهنمای lstat(2) را ببینید) را انجام میدهد. در این حالت اگر فایل یک پیوند باشد، اطلاعات مربوط به خود پیوند به جای فایل مقصد بازگردانده میشود. این گزینه برای مفید واقع شدن عنصر link الزامی است. بسیار مهم است توجه داشته باشید که این رفتار دقیقاً برعکس رفتار دستور ls(1) و غیره است.
- -n
- همواره نام فایلها را نمایش میدهد. معمولاً نامها تنها زمانی نشان داده میشوند که خروجی به خروجی استاندارد فرستاده شود و بیش از یک فایل در فهرست وجود داشته باشد.
- -N
- هرگز نام فایلها را نمایش نمیدهد.
- -o
- اگر حالت دسترسی خام فایل چاپ شود، آن را در مبنای هشت (اکتال) نشان میدهد که برای خوانش انسانی بسیار مفیدتر از مبنای ده پیشفرض است. در این حالت یک صفر در ابتدا چاپ خواهد شد. توجه داشته باشید که این گزینه بر نمایش داده شدن حالت دسترسی خام یا قالببندیشده تأثیری ندارد (که توسط گزینههای -r و -s کنترل میشود)، و همچنین تأثیری بر نمایش یا عدم نمایش کلی حالت فایل ندارد.
- -r
- دادههای خام (قالب پیشفرض) را در کنار دادههای رشتهای (قالب -s) چاپ میکند؛ دادههای رشتهای درون پرانتز پس از دادههای خام ظاهر میشوند.
- -s
- عناصر mode، uid، gid و سه عنصر زمانی را به جای عدد به صورت رشته چاپ میکند. در هر مورد، قالب مشابه خروجی ls -l است.
- -t
- همواره نام نوع فیلدها را برای عناصر struct stat نشان میدهد. معمولاً این نامها تنها زمانی چاپ میشوند که خروجی در خروجی استاندارد باشد و هیچ عنصر منفردی انتخاب نشده باشد.
- -T
- هرگز نام نوع عناصر struct stat را نمایش نمیدهد.
ماژول ZSH/SYSTEM (THE ZSH/SYSTEM MODULE)
ماژول zsh/system دستورات توکار و پارامترهای گوناگونی را در دسترس قرار میدهد.
دستورات توکار (Builtins)
- syserror [ -e errvar ] [ -p prefix ] [ errno | errname ]
- این دستور پیام خطای مرتبط با errno (یک شماره خطای سیستمی) را همراه با یک خط جدید در خروجی خطای استاندارد چاپ میکند.
به جای شماره خطا، میتوان از یک نام errname مانند ENOENT استفاده کرد. مجموعه این نامها همان محتوای آرایه errnos است، به توضیحات زیر مراجعه کنید.
اگر رشته prefix ارائه شود، بدون هیچ فاصله واسطی در ابتدای پیام خطا چاپ میشود.
اگر errvar داده شود، کل پیام بدون خط جدید به پارامتری با نام errvar اختصاص داده شده و چیزی چاپ نخواهد شد.
وضعیت خروجی 0 نشان میدهد پیام با موفقیت چاپ شده است (اگرچه در صورتی که شماره خطا خارج از دامنه سیستم باشد ممکن است مفید نباشد)، وضعیت خروجی 1 نشاندهنده خطا در پارامترهاست، و وضعیت خروجی 2 نشان میدهد نام خطا شناخته نشده است (در این حالت پیامی چاپ نمیشود).
- sysopen [ -arw ] [ -m permissions ] [ -o options ]
- -u fd file
- این دستور یک فایل را باز میکند. پرچمهای -r، -w و -a به ترتیب نشان میدهند که فایل باید برای خواندن، نوشتن و الحاق باز شود. گزینه -m امکان تعیین مجوزهای اولیه هنگام ایجاد فایل را در قالب مبنای هشت فراهم میکند. توصیفکننده فایل با -u مشخص میشود. میتوان یک توصیفکننده فایل صریح در محدوده 0 تا 9 تعیین کرد یا نام متغیری را ارائه داد که شماره توصیفکننده فایل به آن اختصاص یابد.
گزینه -o امکان میدهد گزینههای گوناگون مختص سیستم به صورت فهرستی جداشده با کاما تعیین شوند. فهرست زیر گزینههای ممکن را نشان میدهد. توجه داشته باشید که بسته به سیستم، برخی ممکن است در دسترس نباشند:
- cloexec
- فایل را علامتگذاری میکند تا هنگام اجرای سایر برنامهها بسته شود (در غیر این صورت توصیفکننده فایل در زیرپوستهها و برنامههای اجرایی خارجی منشعب باز میماند)
- create
- creat
- در صورت عدم وجود فایل، آن را ایجاد میکند
- excl
- فایل را ایجاد میکند و در صورت وجود قبلی آن، خطا میدهد
- noatime
- از بهروزرسانی زمان دسترسی (atime) فایل جلوگیری میکند
- nofollow
- در صورتی که file یک پیوند نمادین باشد با شکست مواجه میشود
- nonblock
- فایل در حالت غیرمسدودکننده (nonblocking) باز میشود
- sync
- درخواست میکند که عملیات نوشتن تا زمانی که دادهها به صورت فیزیکی نوشته نشدهاند منتظر بماند
- truncate
- trunc
- فایل را به اندازه 0 کوتاه (truncate) میکند
برای بستن فایل، از یکی از دستورات زیر استفاده کنید:
exec {fd}<&-
exec {fd}>&-
- sysread [ -c countvar ] [ -i infd ] [ -o outfd ]
- [ -s bufsize ] [ -t timeout ] [ param ]
- یک عملیات خواندن سیستمی منفرد را از توصیفکننده فایل infd (یا صفر در صورت عدم تعیین) انجام میدهد. نتیجه خواندن در param یا در REPLY در صورت عدم تعیین ذخیره میشود. اگر countvar داده شود، تعداد بایتهای خواندهشده به پارامتری با نام countvar اختصاص مییابد.
حداکثر تعداد بایتهای خواندهشده bufsize یا در صورت عدم تعیین 8192 است؛ با این حال به محض اینکه هر تعدادی از بایتها با موفقیت خوانده شد، دستور بلافاصله بازمیگردد.
اگر timeout داده شود، زمانانتظار را برحسب ثانیه تعیین میکند، که میتواند صفر باشد تا توصیفکننده فایل را نمونهبرداری (poll) کند. این کار در صورت امکان با فراخوانی سیستمی poll و در غیر این صورت با فراخوانی سیستمی select مدیریت میشود.
اگر outfd داده شود، تلاشی صورت میگیرد تا تمام بایتهای تازه خواندهشده در توصیفکننده فایل outfd نوشته شوند. اگر این عملیات به دلیل یک خطای سیستمی غیر از EINTR یا به دلیل خطای درونی zsh در طول وقفه با شکست مواجه شود، بایتهای خواندهشده اما نوشتهنشده در پارامتری با نام param در صورت ارائه ذخیره میشوند (در این حالت پیشفرضی به کار نمیرود)، و تعداد بایتهای خواندهشده اما نوشتهنشده در پارامتری با نام countvar در صورت تعیین ذخیره میگردد. اگر موفقیتآمیز بود، countvar مانند همیشه حاوی تعداد کامل بایتهای انتقالیافته است و param تنظیم نمیشود.
خطای EINTR (فراخوانی سیستمی متوقفشده با وقفه) به صورت درونی مدیریت میشود تا وقفههای پوسته برای فراخوان شفاف باشند. هر خطای دیگری باعث بازگشت دستور میگردد.
وضعیتهای بازگشتی ممکن عبارتند از:
- 0
- حداقل یک بایت داده با موفقیت خوانده شده و در صورت لزوم نوشته شده است.
- 1
- خطایی در پارامترهای ارائهشده به دستور رخ داده است. این تنها خطایی است که برای آن پیامی در خروجی خطای استاندارد چاپ میشود.
- 2
- خطایی در هنگام خواندن، یا در حین بررسی توصیفکننده فایل ورودی برای زمانانتظار رخ داده است. پارامتر ERRNO نوع خطا را نشان میدهد.
- 3
- دادهها با موفقیت خوانده شدند، اما در هنگام نوشتن آنها در outfd خطایی رخ داد. پارامتر ERRNO خطا را گزارش میکند.
- 4
- تلاش برای خواندن با پایان زمانانتظار مواجه شد. توجه داشته باشید این حالت ERRNO را تنظیم نمیکند زیرا یک خطای سیستمی نیست.
- 5
- هیچ خطای سیستمی رخ نداد، اما صفر بایت خوانده شد. این حالت معمولاً نشاندهنده پایان فایل (EOF) است. پارامترها بر اساس قواعد معمول تنظیم میشوند؛ هیچ تلاشی برای نوشتن در outfd انجام نمیگیرد.
- sysseek [ -u fd ] [ -w start|end|current ] offset
- موقعیت فعلی فایل را که خواندنها و نوشتنهای بعدی در آن رخ خواهند داد به آفست بایتی مشخصشده تنظیم میکند. مقدار offset به عنوان یک عبارت ریاضی ارزیابی میشود. گزینه -u امکان تعیین توصیفکننده فایل را فراهم میکند. به طور پیشفرض آفست نسبت به ابتدای فایل سنجیده میشود، اما با گزینه -w میتوان مشخص کرد که آفست نسبت به موقعیت فعلی یا انتهای فایل سنجیده شود.
- syswrite [ -c countvar ] [ -o outfd ] data
- دادهها (یک رشته بایت منفرد) را با استفاده از فراخوانی سیستمی write در توصیفکننده فایل outfd (یا 1 در صورت عدم تعیین) مینویسد. در صورتی که عملیات اول تمام دادهها را ننویسد، ممکن است چندین عملیات نوشتن متوالی انجام شود.
اگر countvar داده شود، تعداد بایتهای نوشتهشده در پارامتری با نام countvar ذخیره میشود؛ در صورت بروز خطا این عدد ممکن است برابر با طول کل data نباشد.
خطای EINTR (فراخوانی سیستمی قطعشده با وقفه) با تلاش مجدد به صورت درونی مدیریت میشود؛ در غیر این صورت خطا باعث بازگشت دستور خواهد شد. برای نمونه اگر توصیفکننده فایل برای خروجی غیرمسدودکننده تنظیم شده باشد، خطای EAGAIN (در برخی سیستمها EWOULDBLOCK) ممکن است منجر به بازگشت زودهنگام دستور شود.
وضعیت خروجی میتواند 0 برای موفقیت، 1 برای خطا در پارامترهای دستور، یا 2 برای خطا در هنگام نوشتن باشد؛ در حالت اخیر پیامی چاپ نمیشود، اما پارامتر ERRNO خطای رخداده را بازتاب میدهد.
- zsystem flock [ -t timeout ] [ -i interval ] [ -f var ] [-er] file
- zsystem flock -u fd_expr
- زیردستور flock از دستور توکار zsystem، قفلگذاری مشورتی فایل (advisory file locking از طریق فراخوانی سیستمی fcntl(2)) را روی کل محتوای فایل مشخصشده انجام میدهد. این شکل از قفلگذاری نیازمند همکاری پردازشهایی است که به فایل دسترسی دارند؛ بارزترین کاربرد آن میان دو نمونه از خود پوسته است.
در حالت اول، file نامگذاریشده که باید از قبل وجود داشته باشد، با باز کردن یک توصیفکننده فایل به آن و اعمال قفل روی آن توصیفکننده، قفل میشود. قفل زمانی پایان مییابد که پردازش پوستهای که قفل را ایجاد کرده خاتمه یابد؛ بنابراین اغلب مناسب است قفلهای فایل درون زیرپوستهها ایجاد شوند، زیرا قفل با خروج زیرپوسته به طور خودکار آزاد میشود. توجه داشته باشید که استفاده از دستور توکار print با گزینه -u به عنوان یک اثر جانبی قفل را آزاد خواهد کرد، و تغییرمسیر به فایل در پوستهای که قفل را در اختیار دارد نیز همین اثر را دارد. برای حل این مشکل از زیرپوسته استفاده کنید، مثلاً `(print message) >> file'. در صورت موفقیت در قفل وضعیت 0 و در غیر این صورت وضعیت 1 بازگردانده میشود.
در حالت دوم، توصیفکننده فایل ارائهشده توسط عبارت حسابی fd_expr بسته شده و قفل آزاد میگردد. توصیفکننده فایل را میتوان با استفاده از فرم `-f var' در حین قفلگذاری به دست آورد؛ در صورت قفل موفقیتآمیز، متغیر پوستهای var روی توصیفکننده فایل مورد استفاده برای قفلگذاری تنظیم میشود. اگر توصیفکننده فایل با هر روش دیگری بسته شود، مثلاً با `exec {var}>&-' قفل آزاد خواهد شد؛ با این حال، صورتی که در اینجا شرح داده شد بررسی ایمنی انجام میدهد که توصیفکننده فایل برای قفل فایل در حال استفاده باشد.
به طور پیشفرض، پوسته برای همیشه منتظر موفقیت در قفلگذاری میماند. گزینه -t timeout یک زمانانتظار برای قفل برحسب ثانیه تعیین میکند؛ ثانیههای کسری مجاز هستند. در طول این مدت، پوسته تلاش میکند هر interval ثانیه (در صورت ارائه گزینه -i interval) یا در غیر این صورت هر یک ثانیه فایل را قفل کند. (این interval پیش از آخرین تلاش در صورت نیاز کوتاهتر میشود تا پوسته تنها تا سقف timeout منتظر بماند و نه بیشتر). اگر تلاش با پایان زمانانتظار مواجه شود، وضعیت 2 بازگردانده میشود.
(توجه: timeout به 2^30-1 ثانیه (حدود ۳۴ سال) و interval به 0.999 * LONG_MAX میکروثانیه (حدود ۳۵ دقیقه در سیستمهای ۳۲ بیتی) محدود است.)
اگر گزینه -e داده شود، توصیفکننده فایل برای قفل در زمانی که پوسته از exec برای راهاندازی یک پردازش جدید استفاده میکند حفظ میشود؛ در غیر این صورت در آن نقطه بسته شده و قفل آزاد میگردد.
اگر گزینه -r داده شود، قفل صرفاً برای خواندن است، در غیر این صورت برای خواندن و نوشتن خواهد بود. توصیفکننده فایل بر همین اساس باز میشود.
- zsystem supports subcommand
- زیردستور supports از دستور توکار zsystem بررسی میکند که آیا یک زیردستور معین پشتیبانی میشود یا خیر. در این صورت وضعیت 0 و در غیر این صورت وضعیت 1 را بازمیگرداند. این دستور در سکوت عمل میکند مگر اینکه خطای نگارشی (یعنی تعداد نادرست آرگومانها) وجود داشته باشد، که در این حالت وضعیت 255 بازگردانده میشود. وضعیت 1 میتواند بیانگر یکی از دو مورد باشد: subcommand شناختهشده است اما توسط سیستمعامل جاری پشتیبانی نمیشود، یا subcommand ناشناخته است (احتمالاً به دلیل نسخه قدیمیتر پوسته پیش از پیادهسازی آن).
توابع ریاضی (Math Functions)
- systell(fd)
- تابع ریاضی systell موقعیت فعلی فایل را برای توصیفکننده فایل ارسالشده به عنوان آرگومان بازمیگرداند.
پارامترها (Parameters)
- errnos
- یک آرایه فقطخواندنی از نام خطاهای تعریفشده در سیستم. اینها معمولاً ماکروهایی در C هستند که با گنجاندن فایل سرایند سیستمی errno.h تعریف میشوند. اندیس هر نام (با فرض اینکه گزینه KSH_ARRAYS تنظیم نشده باشد) متناظر با شماره خطا است. به شمارههای خطای num پیش از آخرین خطای شناختهشده که نامی ندارند، نام Enum در آرایه اختصاص داده میشود.
توجه داشته باشید که نامهای مستعار برای خطاها مدیریت نمیشوند؛ تنها نام استاندارد و رسمی به کار میرود.
- sysparams
- یک آرایه انجمنی فقطخواندنی. کلیدها عبارتند از:
- pid
- شناسه پردازش (PID) پردازش جاری را حتی در زیرپوستهها بازمیگرداند. مقایسه کنید با $$، که شناسه پردازش پردازش اصلی پوسته را بازمیگرداند.
- ppid
- شناسه پردازش جاری والد پردازش فعلی را حتی در زیرپوستهها بازمیگرداند. مقایسه کنید با $PPID، که شناسه پردازش والد اولیه پردازش اصلی پوسته را بازمیگرداند.
- procsubstpid
- شناسه پردازش آخرین پردازش راهاندازیشده برای جایگزینی پردازش بازمیگرداند، یعنی بسطهای <(...) و >(...).
ماژول ZSH/NET/TCP (THE ZSH/NET/TCP MODULE)
ماژول zsh/net/tcp یک دستور توکار در دسترس قرار میدهد:
- ztcp [ -acflLtv ] [ -d fd ] [ args ]
- دستور ztcp به صورت یک دستور توکار پیادهسازی شده است تا امکان استفاده کامل از ویرایش خط فرمان پوسته، ورودی/خروجی فایل، و سازوکارهای کنترل شغل را فراهم کند.
اگر ztcp بدون هیچ گزینهای اجرا شود، محتوای جدول نشستهای (session table) خود را نمایش میدهد.
اگر تنها با گزینه -L اجرا شود، محتوای جدول نشستها را در قالبی مناسب برای تجزیه خودکار خروجی میدهد. در صورتی که این گزینه همراه با دستوری برای باز کردن یا بستن یک نشست داده شود، نادیده گرفته خواهد شد. خروجی شامل مجموعهای از خطوط است (یکی به ازای هر نشست) که هر کدام حاوی عناصر زیر بوده و با فاصله از یکدیگر جدا شدهاند:
- توصیفکننده فایل (File descriptor)
- توصیفکننده فایل در حال استفاده برای اتصال. برای اتصالهای عادی ورودی (I) و خروجی (O)، این توصیفکننده میتواند با سازوکارهای معمول پوسته خوانده و نوشته شود. با این حال، تنها باید با `ztcp -c' بسته شود.
- نوع اتصال (Connection type)
- حرفی که نحوه ایجاد نشست را نشان میدهد:
- میزبان محلی (The local host)
- معمولاً روی یک آدرس IP سراسر صفر تنظیم میشود زیرا آدرس لوکالهاست اهمیتی ندارد.
- پورت محلی (The local port)
- احتمالاً صفر خواهد بود مگر آنکه اتصال برای گوش دادن باشد.
- میزبان دوردست (The remote host)
- نام دامنه کاملاً واجد شرایط (FQDN) طرف مقابل در صورت در دسترس بودن، وگرنه یک آدرس IP است. برای نشستی که جهت شنود باز شده است، یک آدرس IP کاملاً صفر خواهد بود.
- پورت دوردست (The remote port)
- برای اتصالی که جهت شنود باز شده باشد برابر صفر است.
اتصالهای خروجی (Outbound Connections)
- ztcp [ -v ] [ -d fd ] host [ port ]
- یک اتصال TCP جدید به host باز میکند. اگر port ذکر نشود، پیشفرض پورت 23 خواهد بود. اتصال به جدول نشستها اضافه شده و پارامتر پوستهای REPLY روی توصیفکننده فایل مرتبط با آن اتصال تنظیم میشود.
اگر -d تعیین شود، آرگومان آن به عنوان توصیفکننده فایل مقصد برای اتصال در نظر گرفته میشود.
برای دریافت خروجی با جزئیات بیشتر، از -v استفاده کنید.
اتصالهای ورودی (Inbound Connections)
- ztcp -l [ -v ] [ -d fd ] port
- دستور ztcp -l یک سوکت شنونده روی پورت TCP به شماره port باز میکند. این سوکت به جدول نشستها افزوده شده و پارامتر پوستهای REPLY روی توصیفکننده فایل مرتبط با آن شنونده تنظیم خواهد شد.
اگر -d تعیین شود، آرگومان آن به عنوان توصیفکننده فایل هدف برای اتصال تلقی میگردد.
برای خروجی مفصلتر، از -v استفاده کنید.
- ztcp -a [ -tv ] [ -d targetfd ] listenfd
- دستور ztcp -a یک اتصال ورودی به پورت مرتبط با listenfd را میپذیرد. اتصال به جدول نشستها اضافه شده و پارامتر پوستهای REPLY روی توصیفکننده فایل متناظر با اتصال ورودی تنظیم میشود.
اگر -d مشخص شود، آرگومان آن به عنوان توصیفکننده فایل هدف برای اتصال لحاظ خواهد شد.
اگر -t مشخص شده باشد، در صورتی که اتصال ورودی در انتظار نباشد، ztcp بلافاصله بازمیگردد. در غیر این صورت منتظر یک اتصال خواهد ماند.
برای دریافت خروجی با جزئیات بیشتر، از -v استفاده کنید.
بستن اتصالها (Closing Connections)
- ztcp -cf [ -v ] [ fd ]
- ztcp -c [ -v ] [ fd ]
- دستور ztcp -c سوکت مرتبط با fd را میبندد. سوکت از جدول نشستها حذف خواهد شد. اگر fd تعیین نشود، ztcp تمام سوکتهای موجود در جدول نشستها را میبندد.
به طور معمول، سوکتهای ثبتشده توسط zftp (راهنمای zshmodules(1) را ببینید) را نمیتوان به این شیوه بست. برای اجبار به بستن چنین سوکتی، از -f استفاده کنید.
برای دریافت خروجی با جزئیات بیشتر، از -v استفاده کنید.
مثال (Example)
نحوه برقراری یک اتصال TCP میان دو نمونه از zsh در زیر آمده است. باید یک پورت استفادهنشده را انتخاب کنیم؛ در اینجا از پورت تصادفی ۵۱۲۳ استفاده میکنیم.
روی host1:
zmodload zsh/net/tcp ztcp -l 5123 listenfd=$REPLY ztcp -a $listenfd fd=$REPLY
اکنون اتصالی از سمت host2 (که البته میتواند همان رایانه باشد) برقرار کنید:
zmodload zsh/net/tcp ztcp host1 5123 fd=$REPLY
اکنون در هر میزبان، $fd حاوی یک توصیفکننده فایل برای گفتوگو با طرف مقابل است. به عنوان مثال، روی host1:
print This is a message >&$fd
read -r line <&$fd; print -r - $line
برای پاکسازی نشستها، روی host1:
ztcp -c $listenfd ztcp -c $fd
ztcp -c $fd
ماژول ZSH/TERMCAP (THE ZSH/TERMCAP MODULE)
ماژول zsh/termcap یک دستور توکار در دسترس قرار میدهد:
- echotc cap [ arg ... ]
- مقدار termcap متناظر با قابلیت cap را همراه با آرگومانهای اختیاری خروجی میدهد.
ماژول zsh/termcap یک پارامتر را در دسترس قرار میدهد:
- termcap
- یک آرایه انجمنی که کدهای قابلیتهای termcap را به مقادیر آنها نگاشت میکند.
ماژول ZSH/TERMINFO (THE ZSH/TERMINFO MODULE)
ماژول zsh/terminfo یک دستور توکار در دسترس قرار میدهد:
- echoti cap [ arg ]
- مقدار terminfo متناظر با قابلیت cap را، که در صورت کاربرد با arg مقداردهی شده، خروجی میدهد.
ماژول zsh/terminfo یک پارامتر را در دسترس قرار میدهد:
- terminfo
- یک آرایه انجمنی که نام قابلیتهای terminfo را به مقادیر آنها نگاشت میکند.
ماژول ZSH/WATCH (THE ZSH/WATCH MODULE)
ماژول zsh/watch میتواند برای گزارش ورود یا خروج کاربران خاص به کار رود. این قابلیت از طریق پارامترهای زیر کنترل میشود:
- LOGCHECK
- بازه زمانی برحسب ثانیه میان بررسیهای مربوط به فعالیت ورود/خروج با استفاده از پارامتر watch.
- watch <S> <Z> (WATCH <S>)
- یک آرایه (فهرست جداشده با دونقطه) از رویدادهای ورود/خروج که باید گزارش شوند.
اگر حاوی کلمه منفرد `all' باشد، تمام رویدادهای ورود/خروج گزارش میشوند. اگر حاوی کلمه منفرد `notme' باشد، تمام رویدادها مانند `all' به استثنای $USERNAME گزارش خواهند شد.
یک مدخل در این فهرست میتواند شامل یک نام کاربری، یک `@' و به دنبال آن نام میزبان راه دور، و یک `%' و به دنبال آن یک خط ترمینال (tty) باشد. هر یک از اینها میتواند یک الگو باشد (هنگام تخصیص به watch حتماً آن را کوت کنید تا بلافاصله دست به تولید نام فایل نزند)؛ تنظیمات گزینه EXTENDED_GLOB رعایت میشود. هر کدام یا همه این مؤلفهها میتوانند در یک مدخل حضور داشته باشند؛ اگر یک رویداد ورود/خروج با همه آنها مطابقت داشته باشد، گزارش خواهد شد.
برای نمونه با تنظیم گزینه EXTENDED_GLOB، دستور زیر:
watch=('^(pws|barts)')
باعث گزارش فعالیتهای مربوط به هر کاربری غیر از pws یا barts میشود.
- WATCHFMT
- قالب گزارشهای ورود/خروج در صورت تنظیم بودن پارامتر watch. پیشفرض `%n has %a %l from %m' است. دنبالههای فرار زیر را میشناسد:
- %n
- نام کاربری که وارد یا خارج شده است.
- %a
- عمل مشاهدهشده، یعنی "logged on" یا "logged off".
- %l
- خطی (tty) که کاربر روی آن لاگین کرده است.
- %M
- نام کامل میزبان راه دور.
- %m
- نام میزبان تا اولین `.'. اگر فقط آدرس IP در دسترس باشد یا فیلد utmp حاوی نام صفحه نمایش X-windows باشد، کل نام چاپ میشود.
NOTE: دنبالههای `%m' و `%M' تنها در صورتی کار خواهند کرد که فیلد نام میزبان در utmp رایانه شما وجود داشته باشد. در غیر این صورت به عنوان رشتههای معمولی با آنها رفتار میشود.
- %F{color} (%f)
- آغاز (پایان) استفاده از رنگ پیشزمینه متفاوت.
- %K{color} (%k)
- آغاز (پایان) استفاده از رنگ پسزمینه متفاوت.
- %S (%s)
- آغاز (پایان) حالت برجسته (standout).
- %U (%u)
- آغاز (پایان) حالت زیرخطدار (underline).
- %B (%b)
- آغاز (پایان) حالت پررنگ (bold).
- %t
- %@
- زمان در قالب ۱۲ ساعته همراه با am/pm.
- %T
- زمان در قالب ۲۴ ساعته.
- %w
- تاریخ در قالب `day-dd'.
- %W
- تاریخ در قالب `mm/dd/yy'.
- %D
- تاریخ در قالب `yy-mm-dd'.
- %D{string}
- تاریخ قالببندیشده به صورت string با استفاده از تابع strftime، همراه با افزونههای zsh همانطور که در EXPANSION OF PROMPT SEQUENCES در zshmisc(1) شرح داده شده است.
- %(x:true-text:false-text)
- یک عبارت سهگانه (ternary) را مشخص میکند. نویسه پس از x دلخواه است؛ از همان نویسه برای جدا کردن متن برای نتیجه «درست» از نتیجه «نادرست» استفاده میشود. هم جداکننده و هم پرانتز راست را میتوان با یک بکاسلش اسکیپ کرد. عبارات سهگانه را میتوان تو در تو قرار داد.
نویسه آزمون x میتواند یکی از `l'، `n'، `m' یا `M' باشد، که در صورت بازگرداندن مقداری غیرخالی توسط دنباله فرار متناظر، نتیجه «درست» را نشان میدهند؛ یا میتواند `a' باشد، که در صورت ورود کاربر تحت نظر نتیجه «درست»، و در صورت خروج او «نادرست» را نشان میدهد. نویسههای دیگر نه درست و نه نادرست ارزیابی میشوند؛ کل عبارت در این حالت حذف خواهد شد.
اگر نتیجه «درست» باشد، true-text بر اساس قواعد فوق قالببندی شده و چاپ میشود، و از false-text صرفنظر میگردد. اگر «نادرست» باشد، از true-text صرفنظر شده و false-text قالببندی و چاپ میشود. هر یک یا هر دوی شاخهها میتوانند خالی باشند، اما هر دو جداکننده باید در هر حال حضور داشته باشند.
علاوه بر این، ماژول zsh/watch یک دستور توکار در دسترس قرار میدهد:
- log
- تمام کاربرانی را که در حال حاضر وارد سیستم شدهاند و تحت تأثیر تنظیمات فعلی پارامتر watch قرار دارند فهرست میکند.
ماژول ZSH/ZFTP (THE ZSH/ZFTP MODULE)
ماژول zsh/zftp یک دستور توکار را در دسترس قرار میدهد:
- zftp subcommand [ args ]
- ماژول zsh/zftp یک کلاینت برای پروتکل انتقال فایل (FTP) است. این ماژول به صورت یک دستور توکار پیادهسازی شده است تا امکان استفاده کامل از ویرایش خط فرمان پوسته، ورودی/خروجی فایل و سازوکارهای کنترل شغل فراهم شود. اغلب کاربران از طریق توابع پوسته که رابط قدرتمندتری ارائه میدهند به آن دسترسی دارند؛ مجموعهای از این توابع همراه با توزیع zsh ارائه شده و در zshzftpsys(1) شرح داده شده است. با این حال، دستور zftp به خودی خود کاملاً قابل استفاده است.
تمام دستورها از نام دستور zftp و به دنبال آن نام یک زیردستور تشکیل شدهاند. این زیردستورها در زیر فهرست شدهاند. وضعیت بازگشتی هر زیردستور منعکسکننده موفقیت یا شکست عملیات از راه دور است. برای اطلاعات بیشتر در مورد نحوه چاپ پاسخهای سرور، به توضیحات متغیر ZFTP_VERBOSE مراجعه کنید.
زیردستورها (Subcommands)
- open host[:port] [ user [ password [ account ] ] ]
- یک نشست جدید FTP به host باز میکند، که میتواند نام یک میزبان متصل به TCP/IP یا یک شماره IP با نگارش نقطهدار استاندارد باشد. اگر آرگومان به صورت host:port باشد، اتصالی به پورت TCP مشخصشده با port به جای پورت استاندارد FTP (یعنی ۲۱) باز میشود. این میتواند نام یک سرویس TCP یا یک عدد باشد: برای اطلاعات بیشتر توضیحات ZFTP_PORT در زیر را ببینید.
اگر از آدرسهای IPv6 در قالب دونقطه استفاده میشود، برای تمایز آن از port باید host را درون کروشههای کوتشده قرار داد، برای مثال '[fe80::203:baff:fe02:8b56]'. برای هماهنگی و یکدستی، این نحو برای تمام قالبهای host مجاز است.
باقیمانده آرگومانها به زیردستور login منتقل میشوند. توجه داشته باشید که اگر آرگومانی فراتر از host ارائه نشود، open به صورت خودکار login را فراخوانی نخواهد کرد. اگر هیچ آرگومانی ارائه نشود، open از پارامترهای تنظیمشده با زیردستور params استفاده خواهد کرد.
پس از یک اتصال باز موفقیتآمیز، متغیرهای پوستهای ZFTP_HOST، ZFTP_PORT، ZFTP_IP و ZFTP_SYSTEM در دسترس خواهند بود؛ بخش `Variables' در زیر را ببینید.
- login [ name [ password [ account ] ] ]
- user [ name [ password [ account ] ] ]
- کاربر با نام name را با پارامترهای password و account لاگین میکند. هر یک از این پارامترها را میتوان حذف کرد، و در صورت نیاز از ورودی استاندارد خوانده خواهند شد (name همواره مورد نیاز است). اگر ورودی استاندارد یک ترمینال باشد، اعلانی برای هر کدام در خروجی خطای استاندارد چاپ میشود و password پژواک نخواهد شد. اگر هر یک از پارامترها استفاده نشوند، یک پیام هشدار چاپ میشود.
پس از ورود موفق، متغیرهای پوستهای ZFTP_USER، ZFTP_ACCOUNT و ZFTP_PWD در دسترس خواهند بود؛ بخش `Variables' در زیر را ببینید.
این دستور میتواند زمانی که کاربری پیشتر لاگین کرده است مجدداً صادر شود، که در این حالت سرور ابتدا برای یک کاربر جدید مقداردهی اولیه خواهد شد.
- params [ host [ user [ password [ account ] ] ] ]
- params -
- پارامترهای دادهشده را برای یک دستور open بعدی بدون آرگومان ذخیره میکند. تنها پارامترهایی که روی خط فرمان داده شدهاند به خاطر سپرده خواهند شد. اگر هیچ آرگومانی داده نشود، پارامترهای در حال حاضر تنظیمشده چاپ میشوند، هرچند گذرواژه به صورت خطی از ستارهها نمایش داده خواهد شد؛ وضعیت بازگشتی در صورت عدم تنظیم هیچ پارامتری یک، و در غیر این صورت صفر است.
هر یک از پارامترها را میتوان به صورت یک `?' مشخص کرد، که برای محافظت در برابر بسط پوسته ممکن است نیاز به کوت کردن داشته باشد. در این حالت، پارامتر مربوطه از stdin مشابه زیردستور login خوانده میشود، از جمله مدیریت ویژه password. اگر به دنبال `?' رشتهای بیاید، از آن به جای پیام پیشفرض به عنوان اعلان برای خواندن پارامتر استفاده میشود (هرگونه نشانهگذاری و فاصله خالی لازم باید در انتهای اعلان گنجانده شود). تنها نویسه اول پارامتر را میتوان با یک `\' کوت کرد؛ بنابراین یک آرگومان "\\$word" تضمین میکند که رشته حاصل از پارامتر پوسته $word چه با `?' شروع شود یا نه، به صورت تحتاللفظی پردازش خواهد شد.
اگر به جای آن یک `-' منفرد داده شود، پارامترهای موجود (در صورت وجود) حذف میشوند. در آن حالت، فراخوانی open بدون هیچ آرگومانی باعث خطا خواهد شد.
فهرست پارامترها پس از یک close حذف نمیشود، با این حال در صورت تخلیه (unload) ماژول zsh/zftp حذف خواهد شد.
برای نمونه:
zftp params ftp.elsewhere.xx juser '?Password for juser: '
میزبان ftp.elsewhere.xx و کاربر juser را ذخیره کرده و سپس با اعلان دادهشده از کاربر رمز عبور متناظر را درخواست میکند.
- test
- اتصال را بررسی میکند؛ اگر سرور گزارش داده باشد که اتصال را بسته است (شاید به دلیل پایان زمانانتظار)، وضعیت 2 بازمیگرداند؛ اگر در هر حال هیچ اتصالی باز نبوده باشد، وضعیت 1 برمیگرداند؛ در غیر این صورت وضعیت 0 را بازمیگرداند. زیردستور test به جز پیامهای چاپشده توسط سازوکار $ZFTP_VERBOSE، یا پیامهای خطا در صورت بسته شدن اتصال، در سکوت اجرا میشود. این آزمایش هیچ بار ترافیک شبکهای به همراه ندارد.
این آزمون تنها در سیستمهایی که دارای فراخوانیهای سیستمی select(2) یا poll(2) هستند پشتیبانی میشود؛ در غیر این صورت پیام `not supported on this system' چاپ میشود.
زیردستور test به صورت خودکار در آغاز هر زیردستور دیگری برای نشست فعلی در زمان باز بودن اتصال فراخوانی خواهد شد.
- cd directory
- دایرکتوری راه دور را به directory تغییر میدهد. همچنین متغیر پوستهای ZFTP_PWD را تغییر میدهد.
- cdup
- دایرکتوری راه دور را به یک سطح بالاتر در درخت دایرکتوری تغییر میدهد. توجه داشته باشید که دستور cd .. روی سیستمهای غیر یونیکس نیز به درستی کار خواهد کرد.
- dir [ arg ... ]
- یک فهرست (مفصل و باجزئیات) از دایرکتوری راه دور ارائه میدهد. آرگومانهای arg مستقیماً به سرور ارسال میشوند. رفتار دستور وابسته به پیادهسازی است، اما یک سرور یونیکس معمولاً آرگومانهای arg را به عنوان آرگومانهای دستور ls تفسیر میکند و بدون هیچ آرگومانی نتیجه `ls -l' را برمیگرداند. فهرست دایرکتوری در خروجی استاندارد نمایش داده میشود.
- ls [ arg ... ]
- فهرستی (خلاصه) از دایرکتوری راه دور ارائه میدهد. بدون arg، فهرستی خام از فایلهای دایرکتوری را به صورت یک فایل در هر خط تولید میکند. در غیر این صورت، بسته به تغییرات جزئی پیادهسازی سرور، رفتاری مشابه با dir دارد.
- type [ type ]
- نوع انتقال داده را به type تغییر میدهد، یا در صورت عدم حضور type نوع فعلی را چاپ میکند. مقادیر مجاز عبارتند از `A' (ASCII)، `I' (Image، یعنی باینری) یا `B' (مترادفی برای `I').
پیشفرض FTP برای انتقال، ASCII است. با این حال اگر zftp تشخیص دهد که میزبان راه دور یک ماشین یونیکس با بایتهای ۸ بیتی است، هنگام open به طور خودکار به استفاده از باینری تغییر وضعیت میدهد. این مورد میتواند بعداً لغو شود.
نوع انتقال تنها زمانی به میزبان راه دور فرستاده میشود که اتصال داده برقرار گردد؛ این دستور بار ترافیک شبکه ندارد.
- ascii
- معادل type A.
- binary
- معادل type I.
- mode [ S | B ]
- نوع حالت انتقال را به جریانی (S) یا بلوکی (B) تنظیم میکند. حالت جریانی (Stream) پیشفرض است؛ حالت بلوکی (Block) پشتیبانی گستردهای ندارد.
- remote file ...
- local [ file ... ]
- اندازه و آخرین زمان تغییر فایلهای راه دور یا محلی را چاپ میکند. اگر بیش از یک مورد در فهرست وجود داشته باشد، ابتدا نام فایل چاپ میشود. عدد اول اندازه فایل، و عدد دوم آخرین زمان تغییر فایل در قالب CCYYMMDDhhmmSS متشکل از سال، ماه، روز، ساعت، دقیقه و ثانیه در GMT است. توجه داشته باشید که این قالب، از جمله طول آن، تضمینشده است به طوری که رشتههای زمانی را میتوان مستقیماً با عملگرهای < و > از دستور توکار [[ مقایسه کرد، حتی اگر طولانیتر از آن باشند که به صورت عدد صحیح نمایش یابند.
همه سرورها از دستورات مربوط به بازیابی این اطلاعات پشتیبانی نمیکنند. در آن حالت، دستور remote چیزی چاپ نمیکند و وضعیت 2 را بازمیگرداند، در مقایسه با وضعیت 1 برای فایلی که یافت نشده است.
دستور local (اما نه remote) میتواند بدون آرگومان استفاده شود، که در این حالت اطلاعات از بررسی توصیفکننده فایل صفر حاصل میشود. این همان فایلی است که توسط یک دستور put بدون تغییرمسیر بیشتر دیده میشود.
- get file ...
- تمام فایلهای file را از سرور دریافت کرده، آنها را الحاق نموده و به خروجی استاندارد ارسال میکند.
- put file ...
- به ازای هر file، فایلی را از ورودی استاندارد خوانده و آن را با نام دادهشده به میزبان راه دور ارسال میکند.
- append file ...
- مشابه put، اما اگر file راه دور از قبل وجود داشته باشد، دادهها به جای بازنویسی، به انتهای آن الحاق میشوند.
- getat file point
- putat file point
- appendat file point
- نسخههایی از get، put و append که انتقال را از point دادهشده در فایل راه دور آغاز میکنند. این ویژگی برای افزودن به یک فایل محلی ناقص مفید است. با این حال توجه داشته باشید که این قابلیت به طور سراسری توسط سرورها پشتیبانی نمیشود (و کاملاً مطابق رفتار تعیینشده در استاندارد نیست).
- delete file ...
- فهرست فایلها را در سرور حذف میکند.
- mkdir directory
- یک دایرکتوری جدید directory در سرور ایجاد میکند.
- rmdir directory
- دایرکتوری directory را در سرور حذف میکند.
- rename old-name new-name
- نام فایل old-name را به new-name در سرور تغییر میدهد.
- site arg ...
- دستوری مختص میزبان را به سرور ارسال میکند. احتمالاً تنها در صورتی که سرور استفاده از آن را دستور دهد به آن نیاز خواهید داشت.
- quote arg ...
- دنباله دستورات خام FTP را به سرور میفرستد. پیش از این کار باید با مجموعه دستورات FTP همانطور که در RFC959 تعریف شده است آشنا باشید. دستورات مفید ممکن است شامل STAT و HELP باشند. همچنین به سازوکار بازگرداندن پیامها همانطور که برای متغیر ZFTP_VERBOSE در زیر شرح داده شده توجه داشته باشید، به ویژه اینکه تمام پیامهای حاصل از اتصال کنترل به خروجی خطای استاندارد فرستاده میشوند.
- close
- quit
- اتصال داده جاری را میبندد. این کار پارامترهای پوستهای ZFTP_HOST، ZFTP_PORT، ZFTP_IP، ZFTP_SYSTEM، ZFTP_USER، ZFTP_ACCOUNT، ZFTP_PWD، ZFTP_TYPE و ZFTP_MODE را لغو مقداردهی (unset) میکند.
- session [ sessname ]
- امکان استفاده همزمان از چندین نشست FTP را فراهم میسازد. نام نشست یک رشته دلخواه از نویسههاست؛ نشست پیشفرض `default' نام دارد. اگر این دستور بدون آرگومان فراخوانی شود، تمام نشستهای فعلی را فهرست میکند؛ با یک آرگومان، به نشست موجود با نام sessname تغییر وضعیت میدهد، یا یک نشست جدید با آن نام ایجاد میکند.
هر نشست وضعیت اتصال، مجموعه پارامترهای پوستهای مختص اتصال (همان مجموعهای که با بسته شدن اتصال لغو میشوند، همانطور که در توضیحات close آمده است)، و هرگونه پارامتر کاربری تعیینشده با زیردستور params را به خاطر میسپارد. تغییر وضعیت به یک نشست قبلی آن مقادیر را بازیابی میکند؛ جابهجایی به یک نشست جدید آنها را به همان شیوهای مقداردهی اولیه میکند که گویی zftp به تازگی بارگذاری شده است. نام نشست فعلی توسط پارامتر ZFTP_SESSION مشخص میشود.
- rmsession [ sessname ]
- یک نشست را حذف میکند؛ اگر نامی داده نشود، نشست فعلی حذف میشود. اگر نشست جاری حذف شود، قدیمیترین نشست موجود به عنوان نشست جاری جدید تعیین میگردد، در غیر این صورت نشست فعلی تغییری نمیکند. اگر نشستی که حذف میشود تنها نشست موجود باشد، یک نشست جدید به نام `default' ایجاد شده و به عنوان نشست جاری تعیین میگردد؛ توجه داشته باشید که این یک نشست جدید است حتی اگر نشستی که حذف میشود نیز `default' نام داشته باشد. توصیه میشود در حالی که دستورهای پسزمینه که از zftp استفاده میکنند هنوز فعال هستند، نشستها حذف نشوند.
پارامترها (Parameters)
پارامترهای پوستهای زیر توسط zftp استفاده میشوند. در حال حاضر هیچکدام از آنها خاص نیستند.
- ZFTP_TMOUT
- عدد صحیح. مدت زمان برحسب ثانیه برای انتظار جهت تکمیل یک عملیات شبکه پیش از بازگرداندن خطا. اگر هنگام بارگذاری ماژول این متغیر تنظیم نشده باشد، مقدار پیشفرض ۶۰ به آن داده خواهد شد. مقدار صفر زمانانتظار را غیرفعال میکند. اگر زمانانتظار در اتصال کنترل رخ دهد، بسته خواهد شد. در صورت وقوع مکرر، از مقدار بزرگتری استفاده کنید.
- ZFTP_IP
- فقطخواندنی. آدرس IP اتصال فعلی با قالب نقطهدار.
- ZFTP_HOST
- فقطخواندنی. نام میزبان سرور راه دور فعلی. اگر میزبان با شماره IP باز شده باشد، ZFTP_HOST به جای آن حاوی شماره IP است؛ این کار بار ناشی از جستجوی نام را حذف میکند، زیرا شمارههای IP بیشتر زمانی به کار میروند که نیمسرور در دسترس نباشد.
- ZFTP_PORT
- فقطخواندنی. شماره پورت TCP راه دور که اتصال به آن باز است (حتی اگر پورت در اصل به عنوان یک سرویس نامگذاریشده مشخص شده باشد). معمولاً این مقدار پورت استاندارد FTP، یعنی ۲۱ است.
در حالت غیرمحتمل که سیستم شما فاقد توابع تبدیل مناسب باشد، این مقدار در ترتیب بایتی شبکه ظاهر میشود. اگر سیستم شما little-endian باشد، پورت شامل دو بایت جابهجاشده است و پورت استاندارد به صورت 5376 گزارش خواهد شد. در آن حالت، پورتهای عددی ارسالشده به zftp open نیز باید در این قالب باشند.
- ZFTP_SYSTEM
- فقطخواندنی. رشته نوع سیستم بازگرداندهشده توسط سرور در پاسخ به درخواست FTP SYST. جالبترین حالت رشتهای است که با "UNIX Type: L8" آغاز میشود، که حداکثر سازگاری را با یک میزبان یونیکس محلی تضمین میکند.
- ZFTP_TYPE
- فقطخواندنی. نوع مورد استفاده برای انتقال داده، یا `A' یا `I'. برای تغییر این مورد از زیردستور type استفاده کنید.
- ZFTP_USER
- فقطخواندنی. نام کاربری که در حال حاضر لاگین کرده است (در صورت وجود).
- ZFTP_ACCOUNT
- فقطخواندنی. نام حساب کاربری جاری (در صورت وجود). بیشتر سرورها نیازی به نام حساب ندارند.
- ZFTP_PWD
- فقطخواندنی. دایرکتوری فعلی روی سرور.
- ZFTP_CODE
- فقطخواندنی. کد سهرقمی آخرین پاسخ FTP از سرور به عنوان یک رشته. این مقدار همچنان پس از بسته شدن اتصال قابل خواندن است و هنگام تغییر نشست جاری تغییر نمیکند.
- ZFTP_REPLY
- فقطخواندنی. آخرین خط از آخرین پاسخ ارسالشده توسط سرور. این مقدار همچنان پس از بسته شدن اتصال قابل خواندن است و هنگام تغییر نشست فعلی تغییر نمیکند.
- ZFTP_SESSION
- فقطخواندنی. نام نشست FTP جاری؛ توضیحات زیردستور session را ببینید.
- ZFTP_PREFS
- رشتهای از اولویتها برای تغییر جنبههای رفتار zftp. هر اولویت یک نویسه منفرد است. موارد زیر تعریف شدهاند:
- P
- حالت غیرفعال (Passive): تلاش میکند سرور راه دور را وادار به آغاز انتقال دادهها کند. این حالت کمی کارآمدتر از حالت sendport است. اگر حرف S بعداً در رشته بیاید، در صورتی که حالت passive در دسترس نباشد، zftp از حالت sendport استفاده خواهد کرد.
- S
- ارسال پورت (Sendport): انتقالها را با دستور FTP PORT آغاز میکند. اگر این نویسه قبل از هر P در رشته بیاید، هرگز تلاشی برای حالت passive نخواهد شد.
- D
- حالت ساده (Dumb): تنها از حداقل ممکن دستورات FTP استفاده میکند. این حالت از تنظیم متغیرهای ZFTP_SYSTEM و ZFTP_PWD جلوگیری کرده و به این معنا خواهد بود که تمام اتصالات به صورت پیشفرض به نوع ASCII هستند. همچنین اگر سرور اندازه را ارسال نکند ممکن است از تنظیم ZFTP_SIZE در طول انتقال جلوگیری کند (بسیاری از سرورها آن را میفرستند).
اگر ZFTP_PREFS در هنگام بارگذاری zftp تنظیم نشده باشد، مقدار پیشفرض آن روی `PS' تنظیم خواهد شد، یعنی در صورت امکان از حالت غیرفعال استفاده شود، در غیر این صورت به حالت sendport برگردد.
- ZFTP_VERBOSE
- رشتهای از ارقام بین 0 تا 5 (شامل هر دو)، که مشخص میکند کدام پاسخها از سوی سرور باید چاپ شوند. تمام پاسخها به خروجی خطای استاندارد فرستاده میشوند. اگر هر یک از اعداد ۱ تا ۵ در رشته ظاهر شوند، پاسخهای خام از سرور با کدهای پاسخی که با آن رقم شروع میشوند در خروجی خطای استاندارد چاپ خواهند شد. اولین رقم از کد پاسخ سهرقمی طبق RFC959 به شرح زیر تعریف شده است:
- 1.
- یک پاسخ مقدماتی مثبت (positive preliminary reply).
- 2.
- یک پاسخ تکمیل مثبت (positive completion reply).
- 3.
- یک پاسخ میانی مثبت (positive intermediate reply).
- 4.
- یک پاسخ تکمیل منفی گذرا (transient negative completion reply).
- 5.
- یک پاسخ تکمیل منفی دائمی (permanent negative completion reply).
باید اشاره کرد که به دلایل نامعلوم، پاسخ «سرویس در دسترس نیست» که باعث پایان اجباری یک اتصال میشود، به عنوان 421 یعنی «منفی گذرا» طبقهبندی شده است، که تفسیری جالب از کلمه «گذرا» محسوب میشود.
کد 0 خاص است: نشان میدهد که تمام خطوط به جز آخرین خط از پاسخهای چندخطی خواندهشده از سرور در قالبی پردازششده در خروجی خطای استاندارد چاپ خواهند شد. طبق عرف، سرورها از این سازوکار برای ارسال اطلاعاتی جهت خواندن کاربر استفاده میکنند. کد پاسخ مناسب در صورتی که با همان پاسخ مطابقت داشته باشد اولویت دارد.
اگر ZFTP_VERBOSE هنگام بارگذاری zftp تنظیم نشده باشد، روی مقدار پیشفرض 450 تنظیم خواهد شد، یعنی پیامهای مخصوص کاربر و تمام خطاها چاپ میشوند. یک رشته تهی معتبر است و مشخص میکند که هیچ پیامی نباید چاپ شود.
توابع (Functions)
- zftp_chpwd
- اگر این تابع توسط کاربر تعریف شود، هر بار که دایرکتوری در سرور تغییر کند فراخوانی میشود، از جمله هنگامی که کاربری وارد شده، یا اتصالی بسته شده باشد. در حالت آخر، مقدار $ZFTP_PWD لغو مقداردهی خواهد شد؛ در غیر این صورت دایرکتوری جدید را منعکس میکند.
- zftp_progress
- اگر این تابع توسط کاربر تعریف شود، در حین عملیات get، put یا append هر بار که دادههای کافی از میزبان دریافت شود فراخوانی خواهد شد. در حین یک عملیات get دادهها به خروجی استاندارد فرستاده میشوند، بنابراین حیاتی است که این تابع در خروجی خطای استاندارد یا مستقیماً در ترمینال بنویسد، و نه در خروجی استاندارد.
هنگامی که این تابع در حین یک انتقال در جریان فراخوانی میشود، پارامترهای پوستهای اضافی زیر تنظیم میگردند:
- ZFTP_FILE
- نام فایل راه دور که به یا از آن انتقال داده میشود.
- ZFTP_TRANSFER
- حرف G برای یک عملیات get و حرف P برای یک عملیات put.
- ZFTP_SIZE
- اندازه کل فایل کاملی که منتقل میشود: همان مقدار اول ارائهشده توسط زیردستورات remote و local برای یک فایل معین. اگر سرور نتواند این مقدار را برای فایل راه دوری که دریافت میشود ارائه دهد، تنظیم نخواهد شد. اگر ورودی از یک لوله (pipe) باشد مقدار ممکن است نادرست بوده و صرفاً با یک بافر پر لوله مطابقت داشته باشد.
- ZFTP_COUNT
- میزان دادههایی که تا کنون منتقل شده است؛ عددی بین صفر و $ZFTP_SIZE، در صورتی که تنظیم شده باشد. این عدد همواره در دسترس است.
تابع در ابتدا با تنظیم مناسب ZFTP_TRANSFER و تنظیم ZFTP_COUNT روی صفر فراخوانی میشود. پس از پایان انتقال، تابع یک بار دیگر با ZFTP_TRANSFER تنظیمشده روی GF یا PF فراخوانی خواهد شد، در صورتی که بخواهد پاکسازی انجام دهد. در غیر این صورت هرگز دو بار با همان مقدار ZFTP_COUNT فراخوانی نمیشود.
گاهی اوقات نشانگر پیشرفت ممکن است اختلال ایجاد کند. این بر عهده کاربر است که تصمیم بگیرد تابع باید تعریف شود یا خیر و در صورت لزوم از unfunction استفاده کند.
مشکلات (Problems)
اتصال نمیتواند در سمت چپ یک لوله (pipe) باز شود زیرا این کار در یک زیرپوسته اتفاق میافتد و اطلاعات فایل در پوسته اصلی بهروزرسانی نمیشود. در مورد تغییرات نوع یا حالت، یا بستن اتصال در یک زیرپوسته، اطلاعات بازگردانده میشوند اما متغیرها تا فراخوانی بعدی به zftp بهروزرسانی نخواهند شد. سایر تغییرات وضعیت در زیرپوستهها در تغییرات متغیرها منعکس نمیشوند (اما در غیر این صورت بیضرر هستند).
حذف نشستها در حالی که دستور zftp در پسزمینه فعال است میتواند اثرات غیرمنتظرهای داشته باشد، حتی اگر از نشستی که حذف میشود استفاده نکند. این به دلیل آن است که تمام زیرپردازشهای پوسته اطلاعات وضعیت تمام اتصالات را به اشتراک میگذارند، و حذف یک نشست ترتیب آن اطلاعات را تغییر میدهد.
در برخی سیستمعاملها، اتصال کنترل پس از فراخوانی fork() معتبر نیست، بنابراین عملیات در زیرپوستهها، در سمت چپ یک خط لوله، یا در پسزمینه امکانپذیر نیست، در حالی که باید اینگونه باشد. این موضوع احتمالاً یک باگ در سیستمعامل است.
ماژول ZSH/ZLE (THE ZSH/ZLE MODULE)
ماژول zsh/zle شامل ویرایشگر خط فرمان Zsh است. راهنمای zshzle(1) را ببینید.
ماژول ZSH/ZLEPARAMETER (THE ZSH/ZLEPARAMETER MODULE)
ماژول zsh/zleparameter دو پارامتر ویژه تعریف میکند که میتوانند برای دسترسی به اطلاعات درونی ویرایشگر خط Zsh به کار روند (راهنمای zshzle(1) را ببینید).
- keymaps
- این آرایه شامل نام نقشههای کلید (keymaps) در حال حاضر تعریفشده است.
- widgets
- این آرایه انجمنی شامل یک مدخل به ازای هر ویجت است. نام ویجت کلید آن است و مقدار آن اطلاعاتی درباره ویجت ارائه میدهد. این مقدار یا رشته `builtin' برای ویجتهای توکار است، یا رشتهای به صورت `user:name' برای ویجتهای تعریفشده توسط کاربر است که در آن name نام تابع پوسته پیادهسازیکننده ویجت است، یا رشتهای به صورت `completion:type:name' برای ویجتهای کاملسازی است، و یا مقداری تهی است در صورتی که ویجت هنوز به طور کامل تعریف نشده باشد. در حالت یکی مانده به آخر، type نام ویجت توکاری است که ویجت کاملسازی رفتار آن را تقلید میکند و name نام تابع پوستهای است که ویجت کاملسازی را پیادهسازی مینماید.
ماژول ZSH/ZPROF (THE ZSH/ZPROF MODULE)
پس از بارگذاری، ماژول zsh/zprof باعث میشود توابع پوسته مورد پروفایلسازی (تحلیل کارایی) قرار گیرند. نتایج پروفایلسازی را میتوان با دستور توکار zprof که توسط این ماژول ارائه میشود به دست آورد. هیچ راهی برای غیرفعال کردن پروفایلسازی به جز تخلیه (unload) این ماژول وجود ندارد.
- zprof [ -c ]
- بدون گزینه -c، دستور zprof نتایج پروفایلسازی را در خروجی استاندارد فهرست میکند. قالب آن قابل مقایسه با دستوراتی مانند gprof است.
در بالا خلاصهای شامل تمام توابعی که حداقل یک بار فراخوانی شدهاند قرار دارد. این خلاصه بر حسب مدت زمان صرفشده در هر یک به صورت نزولی مرتب شده است. خطوط شامل شماره ترتیبی تابع هستند، که در سایر بخشهای فهرست در پسوندهایی به صورت `[num]' استفاده میشود، و سپس تعداد فراخوانیهای انجامشده از آن تابع میآید. سه ستون بعدی زمان صرفشده در تابع و نوادگان آن را برحسب میلیثانیه، میانگین زمان صرفشده در تابع و نوادگان آن به ازای هر فراخوانی برحسب میلیثانیه، و درصد زمان صرفشده در تمام توابع پوسته مورد استفاده در این تابع و نوادگان آن را نشان میدهند. سه ستون پس از آن همین اطلاعات را ارائه میدهند، اما تنها زمان صرفشده در خود تابع را محاسبه میکنند. ستون پایانی نام تابع را نشان میدهد.
پس از بخش خلاصه، اطلاعات تفصیلی درباره هر تابعی که فراخوانی شده فهرست میشود، که به ترتیب نزولی مقدار زمان صرفشده در هر تابع و نوادگان آن مرتب شده است. هر یک از این مدخلها شامل توضیحاتی برای توابعی است که تابع مورد نظر را فراخوانی کردهاند، خود تابع، و توابعی که از درون آن فراخوانی شدهاند. توضیحات مربوط به خود تابع همان قالب بخش خلاصه را دارد (و همان اطلاعات را نشان میدهد). خطوط دیگر شماره تابع را در ابتدا نشان نمیدهند و نام تابع آنها دارای تورفتگی است تا تشخیص خط نشاندهنده تابع شرحدادهشده در این بخش از خطوط اطراف آسانتر شود.
اطلاعات نشان دادهشده در این حالت تقریباً مشابه بخش خلاصه است، اما تنها به سلسلهمراتب فراخوانی در حال نمایش اشاره دارد. برای نمونه برای یک تابع فراخوان، ستون نشاندهنده کل زمان اجرا، زمان صرفشده در تابع مورد نظر و نوادگان آن را تنها برای دفعاتی که از آن تابع فراخوان خاص فراخوانی شده فهرست میکند. به طور مشابه برای یک تابع فراخوانیشده، این ستون کل زمان صرفشده در تابع فراخوانیشده و نوادگان آن را تنها برای دفعاتی که از تابع مورد نظر فراخوانی شده فهرست مینماید.
همچنین در این حالت، ستون نشاندهنده تعداد فراخوانیهای یک تابع، یک اسلش و سپس تعداد کل دفعات فراخوانی تابع صدازدهشده را نشان میدهد.
تا زمانی که ماژول zsh/zprof بارگذاری شده باشد، پروفایلسازی انجام خواهد شد و فراخوانیهای مکرر دستور توکار zprof زمانها و تعداد فراخوانیها را از زمان بارگذاری ماژول نشان خواهند داد. با گزینه -c، دستور توکار zprof شمارندههای درونی خود را بازنشانی کرده و فهرستی نمایش نخواهد داد.
ماژول ZSH/ZPTY (THE ZSH/ZPTY MODULE)
ماژول zsh/zpty یک دستور توکار ارائه میدهد:
- zpty [ -e ] [ -b ] name [ arg ... ]
- آرگومانهای پس از name با قرار دادن فاصله میان آنها الحاق شده، سپس به عنوان یک دستور اجرا میشوند، درست مانند اینکه به دستور توکار eval ارسال شده باشند. دستور تحت یک شبهترمینال (pseudo-terminal) تازه اختصاصیافته اجرا میشود؛ این ویژگی برای اجرای غیرتعاملی دستوراتی که انتظار یک محیط تعاملی را دارند مفید است. مقدار name جزئی از دستور نیست، اما برای ارجاع به این دستور در فراخوانیهای بعدی zpty استفاده میشود.
با گزینه -e، شبهترمینال به گونهای تنظیم میشود که نویسههای ورودی پژواک (echo) داده شوند.
با گزینه -b، ورودی و خروجی شبهترمینال در حالت غیرمسدودکننده (non-blocking) قرار میگیرد.
پارامتر پوستهای REPLY روی توصیفکننده فایل اختصاصیافته به سمت اصلی (master) شبهترمینال تنظیم میشود. این امکان میدهد ترمینال با گردانندههای توصیفکننده ZLE مانیتور شود (راهنمای zshzle(1) را ببینید) یا با sysread و syswrite مدیریت گردد (بخش THE ZSH/SYSTEM MODULE در zshmodules(1) را ببینید). هشدار: استفاده از sysread و syswrite توصیه نمیشود؛ از zpty -r و zpty -w استفاده کنید مگر اینکه دقیقاً بدانید چه کار میکنید.
- zpty -d [ name ... ]
- گزینه -d برای حذف دستوراتی که پیشتر راهاندازی شدهاند با ارائه فهرستی از nameهای آنها استفاده میشود. اگر هیچ nameای داده نشود، تمام دستورها حذف خواهند شد. حذف یک دستور باعث ارسال سیگنال HUP به پردازش متناظر میشود. استفاده از این حالت در یک زیرپوسته ایده مناسبی نیست، زیرا دستور را خواهد کشت اما پوسته والد را درباره وضعیت سردرگم باقی میگذارد و ممکن است تلاش کند پردازش دیگری را که شناسه پردازش را مجدداً استفاده کرده بکشد.
- zpty -w [ -n ] name [ string ... ]
- گزینه -w میتواند برای ارسال رشتههای string دادهشده به عنوان ورودی به دستور name (جداشده با فاصله) استفاده شود. اگر گزینه -n داده نشود، یک خط جدید در انتها اضافه میشود.
اگر هیچ stringای ارائه نشود، ورودی استاندارد در شبهترمینال کپی میشود؛ این عملیات در صورت غیرمسدودکننده بودن شبهترمینال ممکن است پیش از کپی کل ورودی متوقف شود. ورودی دقیق همواره کپی میشود: گزینه -n اعمال نخواهد شد.
توجه داشته باشید که دستور تحت شبهترمینال این ورودی را به گونهای میبیند که گویی تایپ شده است، بنابراین هنگام ارسال نویسههای کنترلی ویژه درایور tty نظیر پاک کردن کلمه، کشتن خط و پایان فایل (EOF) احتیاط کنید.
- zpty -r [ -mt ] name [ param [ pattern ] ]
- گزینه -r میتواند برای خواندن خروجی دستور name استفاده شود. تنها با آرگومان name، خروجی خواندهشده در خروجی استاندارد کپی میشود. مگر اینکه شبهترمینال غیرمسدودکننده باشد، کپی کردن تا زمان خروج دستور تحت شبهترمینال ادامه مییابد؛ در حالت غیرمسدودکننده، تنها مقداری از خروجی که بلافاصله در دسترس است کپی میشود. وضعیت بازگشتی در صورت کپی هر مقداری از خروجی صفر است.
هنگامی که یک آرگومان param نیز داده شود، حداکثر یک خط خوانده شده و در پارامتر با نام param ذخیره میشود. در صورت غیرمسدودکننده بودن شبهترمینال ممکن است کمتر از یک خط کامل خوانده شود. وضعیت بازگشتی در صورت ذخیره حداقل یک نویسه در param صفر است.
اگر یک pattern نیز ارائه شود، خروجی تا زمانی خوانده میشود که کل رشته خواندهشده با pattern مطابقت پیدا کند، حتی در حالت غیرمسدودکننده. وضعیت بازگشتی در صورتی که رشته خواندهشده با الگو مطابقت داشته باشد، یا اگر دستور خاتمه یافته باشد اما حداقل یک نویسه همچنان قابل خواندن باشد، صفر خواهد بود. اگر گزینه -m حضور داشته باشد، وضعیت بازگشتی تنها در صورت تطابق با الگو صفر است. تا زمان نگارش این مستند، حداکثر یک مگابایت خروجی میتواند از این طریق خوانده شود؛ اگر یک مگابایت کامل بدون تطابق با الگو خوانده شود، وضعیت بازگشتی غیر صفر خواهد بود.
در تمام حالات، اگر چیزی قابل خواندن نباشد وضعیت بازگشتی غیر صفر است، و اگر این موضوع به دلیل پایان یافتن دستور باشد مقدار آن 2 خواهد بود.
اگر گزینه -r با گزینه -t ترکیب شود، zpty پیش از تلاش برای خواندن، در دسترس بودن خروجی را بررسی میکند. اگر خروجی در دسترس نباشد، zpty بلافاصله وضعیت 1 را بازمیگرداند. هنگام استفاده همراه با یک pattern، رفتار در زمان شکست در نمونهبرداری مشابه زمانی است که دستور خاتمه یافته باشد: اگر حداقل یک نویسه همچنان قابل خواندن باشد مقدار بازگشتی صفر است حتی اگر الگو با شکست در تطابق مواجه شده باشد.
- zpty -t name
- گزینه -t بدون گزینه -r میتواند برای آزمایش در حال اجرا بودن دستور name به کار رود. در صورت در حال اجرا بودن دستور وضعیت صفر و در غیر این صورت مقداری غیر صفر بازمیگرداند. توجه داشته باشید که این گزینه نشاندهنده در دسترس بودن یا نبودن خروجی برای خواندن نیست.
- zpty [ -L ]
- آخرین صورت، بدون هیچ آرگومانی، برای فهرست کردن دستورات در حال حاضر تعریفشده استفاده میشود. اگر گزینه -L داده شود، این کار در قالب فراخوانیهایی به دستور توکار zpty انجام خواهد گرفت.
ماژول ZSH/ZSELECT (THE ZSH/ZSELECT MODULE)
ماژول zsh/zselect یک دستور توکار در دسترس قرار میدهد:
- zselect [ -rwe ] [ -t timeout ] [ -a array ] [ -A assoc ] [ fd ... ]
- دستور توکار zselect رابطی برای فراخوانی سیستمی `select' است که اجرا را تا زمان آماده شدن یک توصیفکننده فایل برای خواندن یا نوشتن، یا وقوع یک وضعیت خطا، با یک زمانانتظار اختیاری مسدود میکند. اگر این قابلیت در سیستم شما موجود نباشد، دستور پیام خطایی چاپ کرده و وضعیت 2 را برمیگرداند (خطاهای عادی وضعیت 1 برمیگردانند). برای اطلاعات بیشتر، مستندات سیستم خود را برای select(2) ببینید. توجه داشته باشید که ارتباطی با دستور توکار پوسته با همین نام وجود ندارد.
آرگومانها و گزینهها میتوانند با هر ترتیبی درهم آمیخته شوند. آرگومانهای غیرگزینهای توصیفکنندههای فایل هستند که باید اعداد صحیح دهدهی باشند. به طور پیشفرض، توصیفکنندههای فایل برای خواندن بررسی میشوند، یعنی zselect زمانی بازمیگردد که دادهها برای خواندن از توصیفکننده فایل آماده باشند، یا به بیان دقیقتر، هنگامی که عملیات خواندن از توصیفکننده فایل مسدود نشود. پس از -r، -w و -e، توصیفکنندههای فایل دادهشده برای شرایط خواندن، نوشتن یا خطا بررسی میشوند. این گزینهها و فهرست دلخواهی از توصیفکنندههای فایل میتوانند با هر ترتیبی داده شوند.
(وجود یک «وضعیت خطا» در مستندات بسیاری از پیادهسازیهای فراخوانی سیستمی select به خوبی تعریف نشده است. طبق نسخههای اخیر استاندارد POSIX، این در واقع یک وضعیت «استثنا» (exception) است که تنها نمونه استاندارد آن دادههای خارج از باند دریافتشده روی یک سوکت است. بنابراین بعید است کاربران zsh گزینه -e را مفید بیابند.)
گزینه `-t timeout' زمانانتظار را برحسب صدم ثانیه تعیین میکند. این مقدار میتواند صفر باشد که در این حالت توصیفکنندههای فایل صرفاً نمونهبرداری شده و zselect بلافاصله بازمیگردد. امکان فراخوانی zselect بدون هیچ توصیفکننده فایلی و با یک زمانانتظار غیر صفر برای استفاده به عنوان جایگزینی دقیقتر برای `sleep' وجود دارد؛ با این حال توجه داشته باشید وضعیت بازگشتی برای یک timeout همواره 1 است.
گزینه `-a array' مشخص میکند که array باید برای نشان دادن توصیفکننده(های) فایل آماده تنظیم شود. اگر این گزینه ارائه نشود، آرایه reply برای این منظور استفاده خواهد شد. آرایه شامل رشتهای مشابه با آرگومانهای zselect خواهد بود. برای نمونه:
zselect -t 0 -r 0 -w 1
ممکن است بلافاصله با وضعیت 0 و در حالی که $reply شامل `-r 0 -w 1' است بازگردد تا نشان دهد هر دو توصیفکننده فایل برای عملیاتهای درخواستی آماده هستند.
گزینه `-A assoc' مشخص میکند که آرایه انجمنی assoc باید برای نشان دادن توصیفکننده(های) فایل آماده مقداردهی شود. این گزینه بر گزینه -a تقدم دارد و reply نیز تغییر نخواهد کرد. کلیدهای assoc همان توصیفکنندههای فایل هستند، و مقادیر متناظر هر یک از نویسههای `rwe' برای نشان دادن وضعیت مربوطه میباشند.
در صورتی که برخی از توصیفکنندههای فایل برای خواندن آماده باشند، دستور وضعیت 0 را بازمیگرداند. اگر عملیات با پایان زمانانتظار مواجه شد، یا زمانانتظار صفر داده شد و هیچ توصیفکنندهای آماده نبود، یا خطایی رخ داد، وضعیت 1 را برمیگرداند و آرایه تنظیم نخواهد شد (و به هیچ وجه تغییر نمیکند). اگر خطایی در عملیات select رخ داده باشد پیام خطای مناسب چاپ میشود.
ماژول ZSH/ZUTIL (THE ZSH/ZUTIL MODULE)
ماژول zsh/zutil تنها تعدادی دستور توکار اضافه میکند:
- zstyle [ -L [ metapattern [ style ] ] ]
- zstyle [ -e | - | -- ] pattern style string ...
- zstyle -d [ pattern [ style ... ] ]
- zstyle -g name [ pattern [ style ] ]
- zstyle -{a|b|s} context style name [ sep ]
- zstyle -{T|t} context style [ string ... ]
- zstyle -m context style pattern
- این دستور توکار برای تعریف و جستجوی سبکها (styles) استفاده میشود. سبکها جفتهایی از نام و مقدار هستند، که مقادیر آنها از هر تعداد رشته تشکیل میشود. سبکها همراه با الگوها ذخیره میشوند و جستجو با ارائه یک رشته به نام `context' (زمینه) انجام میگیرد که با الگوها مطابقت داده میشود. تعریف ذخیرهشده برای خاصترین الگویی که مطابقت داشته باشد بازگردانده خواهد شد.
یک الگو زمانی خاصتر از الگوی دیگر در نظر گرفته میشود که مؤلفههای بیشتری (زیررشتههای جداشده با دونقطه) داشته باشد یا الگوهای مربوط به مؤلفههای آن خاصتر باشند، به این صورت که رشتههای ساده خاصتر از الگوها و الگوهای پیچیده خاصتر از الگوی `*' تلقی میشوند. یک `*' در الگو با صفر یا چند نویسه در زمینه مطابقت دارد؛ دونقطهها در این زمینه رفتار خاصی ندارند. اگر دو الگو به یک اندازه خاص باشند، برابری به نفع الگویی که اول تعریف شده است شکسته میشود.
مثال
برای نمونه، یک پلاگین فرضی به نام `weather' ممکن است در مستندات خود بیان کند که به جستجوی سبک preferred-precipitation در زمینه `:weather:continent:day-of-the-week:phase-of-the-moon' میپردازد. بر این اساس، شما ممکن است مقادیر زیر را در فایل zshrc خود تنظیم کنید:
zstyle ':weather:europe:*' preferred-precipitation rain zstyle ':weather:*:Sunday:*' preferred-precipitation snow
سپس پلاگین در پشت صحنه دستوری مانند دستور زیر را اجرا میکند:
zstyle -s ":weather:${continent}:${day_of_week}:${moon_phase}" preferred-precipitation REPLY
تا ترجیح شما را در متغیر اسکالر $REPLY بازیابی کند. در روزهای یکشنبه مقدار $REPLY برابر `snow' خواهد بود؛ در اروپا برابر `rain' خواهد بود؛ و در روزهای یکشنبه در اروپا دوباره برابر `snow' تنظیم میشود، زیرا هر دو الگوی `:weather:europe:*' و `:weather:*:Sunday:*' با آرگومان context در دستور zstyle -s مطابقت دارند، دارای درجه ویژگی یکسانی هستند، و الگوی دوم خاصتر است (زیرا مؤلفههای جداشده با دونقطه بیشتری دارد).
نحوه استفاده
حالتهایی که روی الگوها عمل میکنند به شرح زیر هستند:
- zstyle [ -L [ metapattern [ style ] ] ]
- بدون آرگومان، تعاریف سبک را فهرست میکند. سبکها به ترتیب الفبایی و الگوها به ترتیبی که zstyle آنها را میآزماید نشان داده میشوند.
اگر گزینه -L داده شود، فهرست کردن در قالب فراخوانیهایی به zstyle انجام میشود. اولین آرگومان اختیاری، metapattern، الگویی است که با رشته ارائهشده به عنوان pattern در هنگام تعریف سبک مطابقت داده خواهد شد. توجه: این بدان معناست که برای نمونه دستور `zstyle -L ":completion:*"' با هر الگوی ارائهشدهای که با `:completion:' آغاز شود تطبیق مییابد، نه فقط با ":completion:*": برای تطبیق دقیق با آن، از ':completion:\*' استفاده کنید. آرگومان دوم اختیاری، خروجی را به یک style مشخص محدود میکند (نه یک الگو). گزینه -L با هیچ گزینه دیگری سازگار نیست.
- zstyle [ - | -- | -e ] pattern style string ...
- سبک style دادهشده را برای الگوی pattern با رشتههای string به عنوان مقدار تعریف میکند. اگر گزینه -e داده شود، رشتههای string (با فاصله) الحاق میشوند و رشته حاصل هنگام جستجوی سبک (به همان روشی که توسط دستور توکار eval انجام میگیرد) ارزیابی خواهد شد. در این حالت پارامتر `reply' باید برای تعیین رشتههای بازگرداندهشده پس از ارزیابی مقداردهی شود. پیش از ارزیابی مقدار، reply لغو مقداردهی میشود، و اگر پس از ارزیابی همچنان لغو شده باقی بماند، با سبک به گونهای رفتار میشود که گویی تنظیم نشده است.
- zstyle -d [ pattern [ style ... ] ]
- تعاریف سبک را حذف میکند. بدون آرگومان تمام تعاریف حذف میشوند؛ با یک pattern تمام تعاریف مربوط به آن الگو حذف میشوند و اگر هرگونه style داده شود، تنها آن سبکها برای آن pattern حذف خواهند شد.
- zstyle -g name [ pattern [ style ] ]
- تعریف یک سبک را بازیابی میکند. مقدار name به عنوان نام آرایهای که نتایج در آن ذخیره میشوند به کار میرود. بدون آرگومانهای بیشتر، تمام الگوهای تعریفشده بازگردانده میشوند. با یک pattern، سبکهای تعریفشده برای آن الگو بازگردانده میشوند و با هر دو آرگومان pattern و style، رشتههای مقدار آن ترکیب بازگردانده خواهد شد.
حالتهای دیگر میتوانند برای جستجو یا آزمایش سبکها برای یک زمینه معین استفاده شوند:
- zstyle -s context style name [ sep ]
- پارامتر name روی مقدار سبک به صورت تفسیرشده به عنوان یک رشته تنظیم میشود. اگر مقدار شامل چندین رشته باشد، آنها با فاصله (یا با رشته sep در صورت ارائه) در میانشان الحاق میشوند.
در صورت تنظیم بودن سبک وضعیت 0 و در غیر این صورت 1 را بازمیگرداند.
- zstyle -b context style name
- مقدار به صورت یک بولی (boolean) در name ذخیره میشود، یعنی در صورتی که مقدار تنها شامل یک رشته باشد و آن رشته برابر یکی از مقادیر `yes'، `true'، `on' یا `1' باشد، رشته `yes' ذخیره خواهد شد. اگر مقدار هر رشته دیگری باشد یا بیش از یک رشته داشته باشد، پارامتر روی `no' تنظیم میشود.
در صورتی که name روی `yes' تنظیم شده باشد وضعیت 0 و در غیر این صورت 1 را بازمیگرداند.
- zstyle -a context style name
- مقدار به صورت یک آرایه در name ذخیره میشود. اگر name به عنوان یک آرایه انجمنی اعلان شده باشد، رشتههای اول، سوم و غیره به عنوان کلیدها و سایر رشتهها به عنوان مقادیر استفاده میشوند.
در صورت تنظیم بودن سبک وضعیت 0 و در غیر این صورت 1 بازگردانده میشود.
- zstyle -t context style [ string ... ]
- zstyle -T context style [ string ... ]
- مقدار یک سبک را آزمایش میکند، یعنی گزینه -t تنها یک وضعیت بازمیگرداند ($? را تنظیم میکند). بدون هیچ stringای، در صورتی که سبک برای حداقل یک الگوی منطبق تعریف شده باشد، تنها یک رشته در مقدار خود داشته باشد و آن رشته برابر با یکی از `true'، `yes'، `on' یا `1' باشد، وضعیت خروجی صفر است. اگر رشتههای string داده شوند، وضعیت خروجی تنها در صورتی صفر است که حداقل یکی از stringها برابر با حداقل یکی از رشتههای موجود در مقدار باشد. اگر سبک تعریف شده باشد اما تطبیق نیابد، وضعیت خروجی 1 است. اگر سبک تعریف نشده باشد، وضعیت 2 خواهد بود.
گزینه -T مقادیر سبک را مشابه -t آزمایش میکند، اما در صورتی که سبک برای هیچ الگوی منطبقی تعریف نشده باشد وضعیت صفر (به جای 2) بازمیگرداند.
- zstyle -m context style pattern
- یک مقدار را تطبیق میدهد. اگر الگوی pattern با حداقل یکی از رشتههای موجود در مقدار تطابق داشته باشد، وضعیت خروجی صفر را بازمیگرداند.
- zformat -f param format spec ...
- zformat -F param format spec ...
- zformat -a array sep spec ...
- این دستور توکار اشکال گوناگونی از قالببندی را ارائه میدهد. حالت اول با گزینه -f انتخاب میشود. در این حالت رشته format با جایگزین کردن دنبالههایی که با علامت درصد شروع میشوند با رشتههای حاصل از specها اصلاح خواهد شد. هر spec باید به صورت `char:string' باشد که باعث میشود هر بار وقوع دنباله `%char' در format با string جایگزین شود. دنباله `%' همچنین میتواند حاوی مشخصههای اختیاری حداقل و حداکثر عرض فیلد میان `%' و `char' به صورت `%min.maxc' باشد، یعنی حداقل عرض فیلد ابتدا میآید و اگر حداکثر عرض فیلد استفاده شود، باید یک نقطه پیش از آن قرار گیرد. تعیین حداقل عرض فیلد باعث میشود در صورتی که string کوتاهتر از عرض درخواستی باشد، نتیجه از سمت راست با فاصلههای خالی پر شود. پر کردن از سمت چپ را میتوان با تعیین حداقل عرض فیلد منفی به دست آورد. اگر حداکثر عرض فیلد مشخص شود، string پس از آن تعداد نویسه قطع (truncate) خواهد شد. پس از پردازش تمام دنبالههای `%' برای specهای دادهشده، رشته حاصل در پارامتر param ذخیره میشود. دنباله `%%' میتواند برای تولید یک علامت % واقعی استفاده شود.
دنبالههای اسکیپ با علامت % همچنین عبارات سهگانه را به همان قالبی که در اعلانها به کار میرود میفهمند. علامت % با یک `(' و سپس یک نویسه مشخصکننده قالب معمولی همانطور که در بالا شرح داده شد دنبال میشود. مجموعهای از ارقام میتوانند قبل یا بعد از `(' قرار گیرند؛ این ارقام یک شماره آزمون را مشخص میکنند که پیشفرض آن صفر است. اعداد منفی نیز مجاز هستند. یک نویسه جداکننده دلخواه به دنبال مشخصکننده قالب میآید، که پس از آن بخشی از متن «درست»، دوباره نویسه جداکننده، بخشی از متن «نادرست»، و یک پرانتز بسته قرار میگیرد. عبارت کامل (بدون ارقام) بنابراین شبیه به `%(X.text1.text2)' خواهد بود، با این تفاوت که نویسه `.' دلخواه است. مقدار ارائهشده برای مشخصکننده قالب در عبارات char:string به عنوان یک عبارت ریاضی ارزیابی شده و با شماره آزمون مقایسه میشود. اگر یکسان باشند، text1 خروجی داده میشود، وگرنه text2 خروجی خواهد بود. یک پرانتز را میتوان در text2 به صورت %) اسکیپ کرد. هر یک از text1 یا text2 میتوانند حاوی دنبالههای فرار % تو در تو باشند.
برای مثال:
zformat -f REPLY "The answer is '%3(c.yes.no)'." c:3
عبارت "The answer is 'yes'." را در REPLY چاپ میکند زیرا مقدار برای مشخصکننده قالب c برابر 3 است، که با آرگومان رقمی عبارت سهگانه مطابقت دارد.
با گزینه -F به جای -f، عبارات سهگانه بر اساس اینکه آیا مشخصکننده قالب حاضر و غیرخالی است یا خیر، میان متن «درست» یا «نادرست» انتخاب میکنند. یک شماره آزمون بیانگر حداقل عرض برای مقدار ارائهشده در مشخصکننده قالب است. اعداد منفی این قاعده را معکوس میکنند، بنابراین آزمون بررسی میکند که آیا مقدار از حداکثر عرض فراتر میرود یا خیر.
حالتی که از گزینه -a استفاده میکند، میتواند برای تراز کردن رشتهها به کار رود. در اینجا specها به صورت `left:right' هستند که در آن `left' و `right' رشتههای دلخواهی میباشند. این رشتهها با جایگزین کردن دونقطهها با رشته sep و پر کردن رشتههای left با فاصلههای خالی از سمت راست اصلاح میشوند به طوری که رشتههای sep در نتیجه (و بنابراین رشتههای right پس از آنها) همگی در صورتی که رشتهها زیر یکدیگر چاپ شوند تراز گردند. تمام رشتههای بدون دونقطه بدون تغییر باقی میمانند و تمام رشتههای دارای یک رشته right خالی، دونقطه انتهایی آنها حذف خواهد شد. در هر دو حالت، طول رشتهها برای تعیین چگونگی تراز شدن سایر رشتهها استفاده نمیشود. یک دونقطه در رشته left را میتوان با یک بکاسلش اسکیپ کرد. رشتههای حاصل در array ذخیره میشوند.
- zregexparse
- این دستور برخی عملکردهای درونی تابع _regex_arguments را پیادهسازی میکند.
- zparseopts [ -D -E -F -K -M ] [ -a array ] [ -A assoc ] [ - ] spec ...
- این دستور توکار تجزیه گزینهها را در پارامترهای مکانی (یعنی مجموعه آرگومانهای ارائهشده توسط $*) ساده میکند. هر spec یک گزینه را شرح میدهد و باید به صورت `opt[=array]' باشد. اگر گزینهای که توسط opt توصیف شده است در پارامترهای مکانی یافت شود، در آرایه array مشخصشده با گزینه -a کپی میشود؛ اگر عبارت اختیاری `=array' داده شده باشد، در عوض در آن آرایه کپی میشود، که باید به عنوان یک آرایه معمولی اعلان شده باشد و هرگز نباید یک آرایه انجمنی باشد.
توجه داشته باشید که ارائه هر spec بدون یک `=array' خطا محسوب میشود مگر اینکه یکی از گزینههای -a یا -A استفاده شده باشد.
مگر در حالتی که گزینه -E داده شده باشد، تجزیه در اولین رشتهای که توسط یکی از specها توصیف نشده باشد متوقف میشود. حتی با -E، تجزیه همواره در یک پارامتر مکانی برابر با `-' یا `--' متوقف خواهد شد. همچنین گزینه -F را ببینید.
توضیحات opt باید یکی از موارد زیر باشد. هر یک از نویسههای ویژه میتوانند در نام گزینه ظاهر شوند به شرطی که یک بکاسلش در پیش از آنها قرار گیرد.
- name
- name+
- مقدار name همان نام گزینه بدون علامت `-' ابتدایی است. برای مشخص کردن یک گزینه طولانی به سبک GNU، یکی از دو علامت `-' آغازین باید در name گنجانده شود؛ برای مثال، یک گزینه `--file' با name به صورت `-file' نشان داده میشود.
اگر یک `+' پس از name ظاهر شود، هر بار که گزینه در پارامترهای مکانی یافت شود به array الحاق میگردد؛ بدون `+' تنها آخرین وقوع گزینه حفظ میشود.
اگر یکی از این قالبها استفاده شود، گزینه هیچ آرگومانی نمیپذیرد، بنابراین در صورتی که پارامتر مکانی بعدی با `-' آغاز نشود، تجزیه متوقف میشود (مگر اینکه گزینه -E استفاده شود).
- name:
- name:-
- name::
- اگر یک یا دو دونقطه داده شود، گزینه یک آرگومان میپذیرد؛ با یک دونقطه، آرگومان اجباری است و با دو دونقطه اختیاری خواهد بود. آرگومان پس از خود گزینه به array الحاق میشود.
یک آرگومان اختیاری در همان عنصر آرایه که نام گزینه قرار دارد گذاشته میشود (توجه داشته باشید این امر رشتههای خالی را به عنوان آرگومان غیرقابل تمایز میسازد). یک آرگومان اجباری به عنوان یک عنصر جداگانه اضافه میشود مگر اینکه از حالت `:-' استفاده شود، که در این حالت آرگومان در همان عنصر قرار میگیرد.
یک `+' همانطور که در بالا توضیح داده شد میتواند میان name و نخستین دونقطه قرار گیرد.
در تمام حالات، آرگومانهای گزینه باید یا بلافاصله پس از گزینه در همان پارامتر مکانی یا در پارامتر بعدی ظاهر شوند. حتی یک آرگومان اختیاری میتواند در پارامتر بعدی ظاهر شود، مگر اینکه با یک `-' شروع شده باشد. هیچ رفتار ویژهای برای `=' همانند تجزیهکنندههای آرگومان به سبک GNU وجود ندارد؛ با فرض spec به صورت `-foo:'، پارامتر مکانی `--foo=bar' به عنوان `--foo' با یک آرگومان `=bar' تجزیه میشود.
هنگامی که نام دو گزینه که آرگومانی نمیپذیرند همپوشانی داشته باشد، طولانیترین گزینه برنده است، به طوری که تجزیه برای specهای `-foo -foobar' (برای مثال) بدون ابهام است. با این حال با توجه به نحوه مدیریت پیشگفته برای آرگومانهای گزینهها، زمانی که حداقل یکی از specهای همپوشان آرگومانی بپذیرد (مانند `-foo: -foobar') ممکن است ابهام رخ دهد. در این حالت، آخرین spec منطبق برنده خواهد بود.
گزینههای خود دستور zparseopts را نمیتوان با هم ترکیب کرد (stack کرد) زیرا برای مثال عبارت `-DEK' از یک spec برای گزینه طولانی به سبک GNU یعنی `--DEK' غیرقابل تفکیک است. گزینههای خود zparseopts عبارتند از:
- -a array
- همانطور که در بالا شرح داده شد، آرایه پیشفرضی را که گزینههای شناختهشده باید در آن ذخیره شوند تعیین میکند.
- -A assoc
- در صورت ارائه، گزینهها و مقادیر آنها همچنین در یک آرایه انجمنی قرار داده میشوند که نام گزینهها به عنوان کلید و آرگومانها (در صورت وجود) به عنوان مقادیر آن خواهد بود.
- -D
- در صورت ارائه این گزینه، تمام گزینههای یافتشده از پارامترهای مکانی پوسته فراخوان یا تابع پوسته، تا (اما نه شامل) هر موردی که توسط specها توصیف نشده باشد حذف میشوند. اگر نخستین پارامتر اینچنینی `-' یا `--' باشد، آن نیز حذف خواهد شد. این شبیه به استفاده از دستور توکار shift است.
- -E
- قواعد تجزیه را تغییر میدهد تا در اولین رشتهای که توسط یکی از specها توصیف نشده است متوقف نشود. میتوان از آن برای آزمایش وجود یا (در صورت استفاده همراه با -D) استخراج گزینهها و آرگومانهای آنها، با نادیده گرفتن تمام گزینهها و آرگومانهای دیگری که ممکن است در پارامترهای مکانی باشند، استفاده کرد. همانطور که در بالا اشاره شد، تجزیه همچنان در اولین `-' یا `--' توصیفنشده توسط یک spec متوقف میشود، اما در صورت استفاده همراه با -D حذف نخواهد شد.
- -F
- در صورت ارائه این گزینه، zparseopts بلافاصله در نخستین پارامتر گزینهمانندی که توسط یکی از specها توصیف نشده باشد متوقف میشود، یک پیام خطا چاپ کرده، و وضعیت 1 را بازمیگرداند. حذف (-D) و استخراج (-E) انجام نمیشوند، و آرایههای گزینه بهروزرسانی نخواهند شد. این گزینه یک اعتبارسنجی اولیه برای گزینههای ارائهشده فراهم میکند.
توجه داشته باشید که حضور گزینهای بدون آرگومان الزامی آن در پارامترهای مکانی، همواره تجزیه را متوقف کرده و خطایی را همانطور که در بالا شرح داده شد برمیگرداند، صرفنظر از اینکه این گزینه استفاده شده باشد یا خیر.
- -K
- با این گزینه، آرایههای مشخصشده با گزینه -a و با قالبهای `=array' هنگامی که هیچیک از specهای مربوط به آنها استفاده نشوند دستنخورده باقی میمانند. در غیر این صورت کل آرایه هنگام استفاده از هر یک از specها جایگزین میشود. عناصر منفرد آرایههای انجمنی مشخصشده با گزینه -A توسط -K حفظ میشوند. این امکان میدهد پیش از فراخوانی zparseopts مقادیر پیشفرضی به آرایهها اختصاص داده شود.
- -M
- قواعد انتساب را برای پیادهسازی نگاشتی میان نامهای معادل گزینهها تغییر میدهد. اگر هر specای از قالب `=array' استفاده کند، رشته array به عنوان نام یک spec دیگر تفسیر میشود، که برای انتخاب محل ذخیره مقادیر به کار میرود. اگر هیچ spec دیگری یافت نشود، مقادیر طبق معمول ذخیره میشوند. این گزینه تنها شیوه ذخیره مقادیر را تغییر میدهد و نه شیوه تجزیه $* را، بنابراین نتایج در صورت استفاده ناهماهنگ از مشخصکننده `name+' ممکن است غیرقابل پیشبینی باشد.
برای نمونه:
set -- -a -bx -c y -cz baz -cend zparseopts a=foo b:=bar c+:=bar
تأثیری به صورت زیر خواهد داشت:
foo=(-a) bar=(-b x -c y -c z)
آرگومانها از `baz' به بعد استفاده نخواهند شد.
به عنوان مثالی برای گزینه -E، دستور زیر را در نظر بگیرید:
set -- -a x -b y -c z arg1 arg2 zparseopts -E -D b:=bar
تأثیری به صورت زیر دارد:
bar=(-b y) set -- -a x -c z arg1 arg2
یعنی گزینه -b و آرگومانهای آن از پارامترهای مکانی برداشته شده و در آرایه bar قرار میگیرند.
گزینه -M میتواند به صورت زیر استفاده شود:
set -- -a -bx -c y -cz baz -cend zparseopts -A bar -M a=foo b+: c:=b
تا اثری به صورت زیر داشته باشد:
foo=(-a) bar=(-a '' -b xyz)
| July 12, 2026 | zsh 5.9.2 |