ZSH(1) General Commands Manual ZSH(1)

zsh - پوسته تعاملی و مفسر دستورات Z

از آنجا که zsh دارای قابلیت‌ها و امکانات بسیار زیادی است، راهنمای آن به چند بخش تقسیم شده است:

zsh یک مفسر دستورات یونیکس (پوسته) است که هم به عنوان یک پوسته ورودی تعاملی و هم به عنوان پردازشگر دستورات اسکریپت پوسته قابل استفاده است. از میان پوسته‌های استاندارد، zsh بیشترین شباهت را به ksh دارد اما شامل بهینه‌سازی‌ها و بهبودهای فراوانی است. این پوسته در حالت عملکرد پیش‌فرض خود سازگاری کامل با POSIX یا سایر پوسته‌ها را ارائه نمی‌دهد؛ بخش «سازگاری (COMPATIBILITY)» را در ادامه ببینید.

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

پوسته Zsh در اصل توسط Paul Falstad نوشته شد. اکنون Zsh توسط اعضای فهرست پستی zsh-workers با نشانی <zsh-workers@zsh.org> نگهداری و توسعه داده می‌شود. هماهنگی توسعه در حال حاضر بر عهده Peter Stephenson با نشانی <pws@zsh.org> است. برای ارتباط با هماهنگ‌کننده می‌توان از نشانی <coordinator@zsh.org> استفاده کرد، اما مسائل مربوط به کد معمولاً باید به فهرست پستی ارسال شوند.

پوسته Zsh از پایگاه‌های HTTP و FTP ناشناس زیر در دسترس است:

ftp://ftp.zsh.org/pub
https://www.zsh.org/pub

کد منبع به‌روز از طریق Git در Sourceforge موجود است. برای جزئیات به https://sourceforge.net/projects/zsh مراجعه کنید. خلاصه‌ای از دستورالعمل‌های مربوط به آرشیو را می‌توانید در https://zsh.sourceforge.io بیابید.

پوسته Zsh چندین فهرست پستی دارد:

<zsh-announce@zsh.org>
اعلانات مربوط به انتشارها، تغییرات عمده در پوسته و ارسال ماهانه پرسش‌های متداول Zsh (مدیریت‌شده).
<zsh-users@zsh.org>
بحث و تبادل نظر کاربران.
<zsh-workers@zsh.org>
توسعه، هک، گزارش باگ‌ها و وصله‌ها.
<zsh-security@zsh.org>
فهرست پستی خصوصی (عموم کاربران امکان عضویت ندارند) برای بحث درباره گزارش‌های باگ با پیامدهای امنیتی، یعنی آسیب‌پذیری‌های احتمالی.

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

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

<zsh-announce-subscribe@zsh.org>
<zsh-users-subscribe@zsh.org>
<zsh-workers-subscribe@zsh.org>
<zsh-announce-unsubscribe@zsh.org>
<zsh-users-unsubscribe@zsh.org>
<zsh-workers-unsubscribe@zsh.org>

شما تنها نیاز به عضویت در یکی از فهرست‌های پستی دارید چرا که آن‌ها تودرتو و همپوشان هستند. تمامی موارد ارسال‌شده به zsh-announce به‌طور خودکار به zsh-users ارسال می‌شوند. تمامی موارد ارسال‌شده به zsh-users نیز به‌طور خودکار به zsh-workers ارسال می‌گردند.

اگر در عضویت یا لغو عضویت در هر یک از فهرست‌های پستی با مشکلی مواجه شدید، به <listmaster@zsh.org> ایمیل ارسال کنید.

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

https://www.zsh.org/mla

پوسته Zsh دارای فهرستی از پرسش‌های متداول (FAQ) است که توسط Peter Stephenson با نشانی <pws@zsh.org> نگهداری می‌شود. این فهرست به‌طور منظم در گروه خبری comp.unix.shell و فهرست پستی zsh-announce ارسال می‌گردد. جدیدترین نسخه را می‌توانید در هر یک از پایگاه‌های FTP مربوط به Zsh یا در https://www.zsh.org/FAQ بیابید. نشانی تماس برای مسائل مربوط به پرسش‌های متداول <faqmaster@zsh.org> است.

پوسته Zsh دارای یک صفحه وب است که در نشانی https://www.zsh.org قرار دارد. نشانی تماس برای مسائل مربوط به وب‌سایت <webmaster@zsh.org> است.

یک راهنمای کاربری هم‌اکنون در حال آماده‌سازی است. این راهنما به عنوان مکملی برای دفترچه راهنما در نظر گرفته شده و توضیحات و نکاتی را درباره مباحثی ارائه می‌دهد که ممکن است در راهنما غامض، رمزی یا کاملاً گیج‌کننده باشند (به عنوان مثال، واژه «hierographic» وجود خارجی ندارد). این راهنما در وضعیت فعلی خود در نشانی https://zsh.sourceforge.io/Guide قابل مشاهده است. در زمان نگارش این متن، فصل‌های مربوط به فایل‌های راه‌اندازی و محتویات آن‌ها و سامانه تکمیل جدید اساساً تکمیل شده بودند.

فلگ‌های زیر هنگام فراخوانی توسط پوسته تفسیر می‌شوند تا مشخص کنند که پوسته دستورات را از کجا خواهد خواند:

-c
آرگومان اول را به عنوان دستوری برای اجرا در نظر می‌گیرد، به جای آنکه دستورات را از یک اسکریپت یا ورودی استاندارد بخواند. اگر آرگومان‌های بیشتری ارائه شود، اولین آن‌ها به $0 اختصاص می‌یابد، نه اینکه به عنوان یک پارامتر مکانی استفاده شود.
پوسته را وادار می‌کند تا به صورت تعاملی عمل کند. همچنان امکان مشخص کردن اسکریپت برای اجرا وجود دارد.
پوسته را وادار می‌کند تا دستورات را از ورودی استاندارد بخواند. اگر فلگ -s حضور نداشته باشد و یک آرگومان ارائه شده باشد، آرگومان اول به عنوان مسیر یک اسکریپت برای اجرا در نظر گرفته می‌شود.

اگر پس از پردازش گزینه‌ها، آرگومان‌های دیگری باقی مانده باشد و هیچ‌یک از گزینه‌های -c یا -s ارائه نشده باشد، آرگومان اول به عنوان نام فایل یک اسکریپت حاوی دستورات پوسته برای اجرا در نظر گرفته می‌شود. اگر گزینه PATH_SCRIPT تنظیم شده باشد و نام فایل شامل مسیر دایرکتوری نباشد (یعنی هیچ کاراکتر / در نام نباشد)، ابتدا دایرکتوری جاری و سپس مسیر دستور مشخص‌شده توسط متغیر PATH برای یافتن اسکریپت جستجو می‌شوند. اگر این گزینه تنظیم نشده باشد یا نام فایل حاوی / باشد، مستقیماً استفاده می‌شود.

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

برای گزینه‌های بیشتر، که بین فراخوانی و دستور داخلی set مشترک هستند، به zshoptions(1) مراجعه کنید.

گزینه بلند --emulate به همراه یک حالت شبیه‌سازی (در یک کلمه مجزا) می‌تواند به پوسته فرستاده شود. حالت‌های شبیه‌سازی همان مواردی هستند که برای دستور داخلی emulate شرح داده شده‌اند؛ به zshbuiltins(1) مراجعه کنید. گزینه --emulate باید پیش از هر گزینه دیگری قرار گیرد (که در غیر این صورت ممکن است نادیده گرفته شوند)، اما گزینه‌های پس از آن رعایت می‌شوند، بنابراین می‌توانند برای تغییر حالت شبیه‌سازی درخواستی استفاده شوند. توجه داشته باشید که در مقایسه با اجرای دستور emulate در داخل پوسته، هنگام استفاده از این گزینه اقدامات اضافی خاصی برای تضمین شبیه‌سازی روان انجام می‌شود: برای مثال، متغیرهایی که با کاربرد POSIX تداخل دارند مانند path در داخل پوسته تعریف نمی‌شوند.

گزینه‌ها را می‌توان بر اساس نام با استفاده از گزینه -o مشخص کرد. گزینه -o مانند یک گزینه تک‌حرفی عمل می‌کند، اما رشته بعدی را به عنوان نام گزینه دریافت می‌نماید. برای مثال:

zsh -x -o shwordsplit scr

اسکریپت scr را اجرا می‌کند، در حالی که گزینه XTRACE را با حرف متناظر -x و گزینه SH_WORD_SPLIT را با نام آن فعال می‌سازد. گزینه‌ها را می‌توان با استفاده از +o به‌جای -o بر اساس نام غیرفعال کرد. گزینه -o می‌تواند با گزینه‌های تک‌حرفی پیشین ترکیب شود، بنابراین برای مثال -xo shwordsplit یا -xoshwordsplit معادل -x -o shwordsplit است.

گزینه‌ها را می‌توان بر اساس نام در سبک گزینه‌های بلند GNU نیز مشخص کرد: --option-name. هنگامی که این کار انجام می‌شود، کاراکترهای - در نام گزینه مجاز هستند: آن‌ها به _ تبدیل شده و بنابراین نادیده گرفته می‌شوند. بنابراین به عنوان مثال، zsh --sh-word-split پوسته zsh را با فعال بودن گزینه SH_WORD_SPLIT فراخوانی می‌کند. مانند سایر نحوهای گزینه‌ها، می‌توان با جایگزین کردن - اولیه با یک + گزینه‌ها را غیرفعال کرد؛ بنابراین +-sh-word-split معادل --no-sh-word-split است. برخلاف سایر نحوهای گزینه‌ها، گزینه‌های بلند به سبک GNU را نمی‌توان با هیچ گزینه دیگری ترکیب کرد، بنابراین برای مثال -x-shwordsplit یک خطا است، به جای آنکه با آن مانند -x --shwordsplit رفتار شود.

گزینه ویژه به سبک GNU یعنی --version پشتیبانی می‌شود؛ این گزینه اطلاعات نسخه پوسته را به خروجی استاندارد ارسال کرده و سپس با موفقیت خارج می‌شود. گزینه --help نیز پشتیبانی می‌شود؛ این گزینه فهرستی از گزینه‌هایی را که می‌توان هنگام فراخوانی پوسته استفاده کرد به خروجی استاندارد ارسال کرده و سپس با موفقیت خارج می‌شود.

پردازش گزینه‌ها را می‌توان به دو روش پایان داد تا آرگومان‌های بعدی که با - یا + شروع می‌شوند به عنوان آرگومان‌های عادی تلقی شوند. نخست، یک - (یا +) تنها به عنوان یک آرگومان مستقل، پردازش گزینه‌ها را خاتمه می‌دهد. دوم، گزینه ویژه -- (یا +-) که می‌تواند به تنهایی مشخص شود (که کاربرد استاندارد POSIX است) یا با گزینه‌های پیشین ترکیب گردد (بنابراین -x- معادل -x -- است). قرار دادن گزینه‌ها بعد از -- مجاز نیست (بنابراین -x-f یک خطا محسوب می‌شود)، اما به قالب گزینه سبک GNU که در بالا بحث شد توجه کنید، جایی که --shwordsplit مجاز است و پردازش گزینه‌ها را خاتمه نمی‌دهد.

به جز زمانی که گزینه‌های تک‌حرفی شبیه‌سازی sh یا ksh فعال باشند، گزینه -b (یا +b) پردازش گزینه‌ها را پایان می‌دهد. گزینه -b مانند -- است، با این تفاوت که گزینه‌های تک‌حرفی بیشتری می‌توانند پس از -b قرار گیرند و طبق معمول اعمال شوند.

پوسته Zsh هنگامی که به ترتیب به عنوان sh یا ksh فراخوانی شود، تلاش می‌کند sh یا ksh را شبیه‌سازی کند؛ دقیق‌تر بگوییم، به اولین حرف از نامی که با آن فراخوانی شده است نگاه می‌کند، بدون در نظر گرفتن هرگونه r ابتدایی (که فرض می‌شود مخفف «restricted» یا محدود است)، و اگر آن حرف b، s یا k باشد، پوسته sh یا ksh را شبیه‌سازی خواهد کرد. افزون بر این، اگر به عنوان su فراخوانی شود (که در برخی سیستم‌ها هنگامی رخ می‌دهد که پوسته توسط دستور su اجرا شود)، پوسته تلاش خواهد کرد نام جایگزینی را از متغیر محیطی SHELL بیابد و شبیه‌سازی را بر اساس آن انجام دهد.

در حالت‌های سازگاری sh و ksh، پارامترهای زیر خاص نبوده و توسط پوسته مقداردهی اولیه نمی‌شوند: ARGC، argv، cdpath، fignore، fpath، HISTCHARS، mailpath، MANPATH، manpath، path، prompt، PROMPT، PROMPT2، PROMPT3، PROMPT4، psvar و status.

اسکریپت‌های معمول راه‌اندازی/خاموش‌سازی zsh اجرا نمی‌شوند. پوسته‌های ورودی (login) ابتدا /etc/profile و سپس $HOME/.profile را فراخوانی می‌کنند. اگر متغیر محیطی ENV هنگام فراخوانی تنظیم شده باشد، $ENV پس از اسکریپت‌های پروفایل اجرا می‌شود. مقدار ENV پیش از تفسیر به عنوان یک مسیر، تحت بسط پارامتر، جایگزینی دستور و بسط محاسباتی قرار می‌گیرد. توجه داشته باشید که گزینه PRIVILEGED نیز بر اجرای فایل‌های راه‌اندازی تأثیر می‌گذارد.

اگر پوسته به عنوان sh یا ksh فراخوانی شود، گزینه‌های زیر تنظیم می‌شوند: NO_BAD_PATTERN، NO_BANG_HIST، NO_BG_NICE، NO_EQUALS، NO_FUNCTION_ARGZERO، GLOB_SUBST، NO_GLOBAL_EXPORT، NO_HUP، INTERACTIVE_COMMENTS، KSH_ARRAYS، NO_MULTIOS، NO_NOMATCH، NO_NOTIFY، POSIX_BUILTINS، NO_PROMPT_PERCENT، RM_STAR_SILENT، SH_FILE_EXPANSION، SH_GLOB، SH_OPTION_LETTERS و SH_WORD_SPLIT. علاوه بر این، اگر zsh به عنوان sh فراخوانی شود، گزینه‌های BSD_ECHO و IGNORE_BRACES تنظیم می‌گردند. همچنین، اگر zsh به عنوان ksh فراخوانی شود، گزینه‌های KSH_OPTION_PRINT، LOCAL_OPTIONS، PROMPT_BANG، PROMPT_SUBST و SINGLE_LINE_ZLE تنظیم خواهند شد.

لطفاً توجه داشته باشید که هرچند تلاش‌های معقولی برای رفع ناسازگاری‌ها هنگام بروز آن‌ها انجام می‌شود، اما zsh شبیه‌سازی کامل سایر پوسته‌ها یا انطباق با POSIX را تضمین نمی‌کند. برای کسب اطلاعات بیشتر درباره تفاوت‌های میان zsh و سایر پوسته‌ها، لطفاً به فصل ۲ از پرسش‌های متداول پوسته در https://www.zsh.org/FAQ مراجعه فرمایید.

هنگامی که نام پایه دستور مورد استفاده برای فراخوانی zsh با حرف r آغاز شود یا گزینه خط فرمان -r هنگام فراخوانی ارائه گردد، پوسته به حالت محدود درمی‌آید. حالت شبیه‌سازی پس از حذف حرف r از نام فراخوانی تعیین می‌شود. موارد زیر در حالت محدود غیرفعال هستند:

•
تغییر دایرکتوری‌ها با دستور داخلی cd
•
تغییر یا لغو پارامترهای EGID، EUID، GID، HISTFILE، HISTSIZE، IFS، LD_AOUT_LIBRARY_PATH، LD_AOUT_PRELOAD، LD_LIBRARY_PATH، LD_PRELOAD، MODULE_PATH، module_path، PATH، path، SHELL، UID و USERNAME
•
تعیین نام دستورات شامل کاراکتر /
•
تعیین مسیر دستورات با استفاده از hash
•
تغییر مسیر خروجی به فایل‌ها
•
استفاده از دستور داخلی exec برای جایگزینی پوسته با دستوری دیگر
•
استفاده از jobs -Z برای بازنویسی فضای آرگومان و محیط پردازش پوسته
•
استفاده از پارامتر ARGV0 برای رونویسی argv[0] برای دستورات خارجی
•
غیرفعال کردن حالت محدود با set +r یا unsetopt RESTRICTED

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

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

یک حالت محدود (Restricted Mode) در پوسته، روشی قدیمی برای محدود کردن کارهایی است که کاربران می‌توانند انجام دهند: سیستم‌های نوین راه‌های بهتر، امن‌تر و قابل اعتمادتری برای مهار اقدامات کاربر دارند، مانند chroot jails، کانتینرها (containers) و zones.

پیاده‌سازی امن یک پوسته محدود بسیار دشوار است. ممکن است این قابلیت در نسخه‌های آینده zsh حذف شود.

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

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

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

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

اگر یک اسکریپت مفسری با perl، python، bash یا دیگر مفسرهای همه‌منظوره به عنوان یک دستور محدود در نظر گرفته شود، کاربر می‌تواند با تنظیم متغیرهای محیطی با ساختار خاص مانند PERL5LIB، PYTHONPATH، BASHENV (و غیره) محدودیت را دور بزند. در سیستم‌های GNU، می‌توان با تنظیم متغیر محیطی GCONV_PATH هر دستوری را هنگام تبدیل مجموعه کاراکترها (از جمله خود zsh) وادار به اجرای کدهای دلخواه کرد. این‌ها تنها چند نمونه هستند.

به خاطر داشته باشید که برخلاف برخی پوسته‌های دیگر، readonly یک ویژگی امنیتی در zsh محسوب نمی‌شود زیرا قابل بازگردانی و لغو است و بنابراین نمی‌توان از آن برای مهار خطرات فوق بهره برد.

یک پوسته محدود تنها زمانی عمل می‌کند که دستورات مجاز اندک بوده و با دقت نوشته شده باشند تا دسترسی بیشتری نسبت به آنچه مورد نظر بوده به کاربران اعطا نکنند. همچنین محدود کردن ماژول‌های zsh که کاربر می‌تواند بارگذاری کند بسیار بااهمیت است، زیرا برخی از آن‌ها مانند zsh/system، zsh/mapfile و zsh/files امکان دور زدن بیشتر محدودیت‌ها را فراهم می‌سازند.

دستورات ابتدا از /etc/zsh/zshenv خوانده می‌شوند؛ این رفتار قابل بازنویسی یا لغو نیست. رفتار پس از آن توسط گزینه‌های RCS و GLOBAL_RCS تغییر می‌یابد؛ گزینه اول بر تمام فایل‌های راه‌اندازی اثر می‌گذارد، در حالی که دومی تنها بر فایل‌های راه‌اندازی سراسری (آن‌هایی که در اینجا با مسیری که با / شروع می‌شود نشان داده شده‌اند) اعمال می‌گردد. اگر در هر نقطه‌ای یکی از این گزینه‌ها لغو شود، فایل‌های راه‌اندازی بعدی از نوع متناظر خوانده نخواهند شد. همچنین ممکن است فایلی در $ZDOTDIR گزینه GLOBAL_RCS را مجدداً فعال کند. هر دو گزینه RCS و GLOBAL_RCS به‌طور پیش‌فرض فعال هستند.

سپس دستورات از $ZDOTDIR/.zshenv خوانده می‌شوند. اگر پوسته یک پوسته ورودی (login shell) باشد، دستورات از /etc/zsh/zprofile و سپس $ZDOTDIR/.zprofile خوانده خواهند شد. سپس، اگر پوسته تعاملی باشد، دستورات از /etc/zsh/zshrc و پس از آن $ZDOTDIR/.zshrc خوانده می‌شوند. در پایان، اگر پوسته لاگین باشد، /etc/zsh/zlogin و $ZDOTDIR/.zlogin خوانده می‌شوند.

هنگامی که یک پوسته لاگین خارج می‌شود، فایل‌های $ZDOTDIR/.zlogout و سپس /etc/zsh/zlogout خوانده می‌شوند. این اتفاق هم با خروج صریح از طریق دستورات exit یا logout و هم با خروج ضمنی بر اثر خواندن پایان فایل (EOF) از ترمینال رخ می‌دهد. با این حال، اگر پوسته به دلیل اجرای یک پردازش دیگر از طریق exec خاتمه یابد، فایل‌های خروج خوانده نخواهند شد. این فایل‌ها نیز تحت تأثیر گزینه‌های RCS و GLOBAL_RCS قرار دارند. همچنین توجه داشته باشید که گزینه RCS بر ذخیره‌سازی فایل‌های تاریخچه تأثیر می‌گذارد؛ یعنی اگر RCS هنگام خروج پوسته لغو شده باشد، هیچ فایل تاریخچه‌ای ذخیره نخواهد شد.

اگر متغیر ZDOTDIR تنظیم نشده باشد، به‌جای آن از HOME استفاده می‌شود. فایل‌هایی که در بالا با مسیر /etc فهرست شده‌اند، ممکن است بسته به نصب در دایرکتوری دیگری باشند.

از آنجا که /etc/zsh/zshenv برای تمامی نمونه‌های zsh اجرا می‌شود، بسیار مهم است که حجم آن تا حد امکان کوچک نگه داشته شود. به طور ویژه، روش مناسب این است کدهایی را که نیازی به اجرا در تک‌تک پوسته‌ها ندارند، درون یک شرط آزمایشی به فرم if [[ -o rcs ]]; then ... قرار دهید تا هنگامی که zsh با گزینه -f فراخوانی می‌شود، اجرا نشوند.

هر یک از این فایل‌ها را می‌توان با دستور داخلی zcompile از پیش کامپایل کرد (به zshbuiltins(1) مراجعه فرمایید). اگر یک فایل کامپایل‌شده موجود باشد (که با نام فایل اصلی به‌همراه پسوند .zwc نام‌گذاری می‌شود) و از فایل اصلی جدیدتر باشد، فایل کامپایل‌شده به‌جای آن استفاده خواهد شد.

$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
${TMPPREFIX}* (پیش‌فرض /tmp/zsh* است)
/etc/zsh/zshenv
/etc/zsh/zprofile
/etc/zsh/zshrc
/etc/zsh/zlogin
/etc/zsh/zlogout (وابسته به نوع نصب - پیش‌فرض /etc است)

sh(1), csh(1), tcsh(1), rc(1), bash(1), ksh(1), zshall(1), zshbuiltins(1), zshcalsys(1), zshcompwid(1), zshcompsys(1), zshcompctl(1), zshcontrib(1), zshexpn(1), zshmisc(1), zshmodules(1), zshoptions(1), zshparam(1), zshroadmap(1), zshtcpsys(1), zshzftpsys(1), zshzle(1)

IEEE Standard for information Technology - Portable Operating System Interface (POSIX) - Part 2: Shell and Utilities, IEEE Inc, 1993, ISBN 1-55937-255-9.

July 12, 2026 zsh 5.9.2