.\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "FISH-FAQ" "1" "Sep 07, 2026" "4.9" "fish-shell" .SH "نام (NAME)" fish\-faq \- پرسش‌های متداول درباره پوسته fish .SH "توضیحات (DESCRIPTION)" این سند شامل پرسش‌ها و پاسخ‌های متداول (FAQ) درباره نحوه کارکرد، ویژگی‌ها، تفاوت‌های رفتاری با سایر پوسته‌ها و تنظیمات پوسته .B fish است. .SH "معادل این ویژگی در بش (یا سایر پوسته‌ها) چیست؟ (WHAT IS THE EQUIVALENT TO THIS THING FROM BASH (OR OTHER SHELLS)?)" .sp صفحه راهنمای .BR fish\-for\-bash\-users (1) \%<> را مشاهده کنید. .SH "چگونه یک متغیر محیطی را مقداردهی یا پاک کنم؟ (HOW DO I SET OR CLEAR AN ENVIRONMENT VARIABLE?)" .sp از دستور .B set \%<> استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX set \-x key value # typically set \-gx key value set \-e key .EE .UNINDENT .UNINDENT .sp از نسخه 3.1 فیش به بعد، می‌توانید مشابه سایر پوسته‌ها با استفاده از نحو \fBkey=value some command\fP یک متغیر محیطی را صرفاً برای اجرای یک دستور تنظیم کنید. دو خط زیر رفتاری یکسان دارند \- بر خلاف سایر پوسته‌ها، فیش در هر دو حالت مقدار \fBvalue\fP را چاپ می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX key=value echo $key begin; set \-lx key value; echo $key; end .EE .UNINDENT .UNINDENT .sp توجه داشته باشید که \(dqصادرشده (exported)\(dq یک حوزه (scope) متغیر \%<#\:variables-scope> نیست، بلکه یک وضعیت اضافی برای آن است. یک متغیر می‌تواند سراسری و صادرشده، محلی و صادرشده، یا حتی جهان‌شمول و صادرشده باشد. معمولاً منطقی است که یک متغیر صادرشده را به صورت سراسری (global) تعریف کنید. .SH "چگونه بررسی کنم که آیا یک متغیر تعریف شده است؟ (HOW DO I CHECK WHETHER A VARIABLE IS DEFINED?)" .sp از \fBset \-q var\fP استفاده کنید. برای نمونه، \fBif set \-q var; echo variable defined; end\fP\&. برای بررسی چند متغیر می‌توانید از ترکیب با \fBand\fP و \fBor\fP به شکل زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX if set \-q var1; or set \-q var2 echo either variable defined end .EE .UNINDENT .UNINDENT .sp به یاد داشته باشید که یک متغیر تعریف‌شده ممکن است خالی نیز باشد؛ چه از طریق نداشتن هیچ عنصری (اگر با \fBset var\fP مقداردهی شده باشد) یا تنها با داشتن عناصر خالی (اگر با \fBset var \(dq\(dq\fP مقداردهی شده باشد). برای نحوه برخورد با این حالت‌ها ادامه مطلب را بخوانید. .SH "چگونه بررسی کنم که آیا یک متغیر خالی نیست؟ (HOW DO I CHECK WHETHER A VARIABLE IS NOT EMPTY?)" .sp از \fBstring length \-q \-\- $var\fP استفاده کنید. برای نمونه، \fBif string length \-q \-\- $var; echo not empty; end\fP\&. توجه داشته باشید که \fBstring length\fP فهرستی از چندین متغیر را به صورت فصل منطقی (یا / or) تفسیر می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX if string length \-q \-\- $var1 $var2 $var3 echo at least one of these variables is not empty end .EE .UNINDENT .UNINDENT .sp به عنوان روشی جایگزین، از \fBtest \-n \(dq$var\(dq\fP استفاده کنید، اما به یاد داشته باشید که \fBمتغیر باید داخل نقل‌قول دوتایی (دابل‌کوتیشن) قرار گیرد\fP\&. برای نمونه، \fBif test \-n \(dq$var\(dq; echo not empty; end\fP\&. دستور \fBtest\fP عملگرهای «و» (\-a) و «یا» (\-o) مخصوص خود را ارائه می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX if test \-n \(dq$var1\(dq \-o \-n \(dq$var2\(dq \-o \-n \(dq$var3\(dq echo at least one of these variables is not empty end .EE .UNINDENT .UNINDENT .sp اگر می‌خواهید بدانید که آیا یک متغیر \fIهیچ عنصری ندارد\fP، از \fBset \-q var[1]\fP استفاده کنید. .SH "چرا به نظر می‌رسد دستور set -Ux (متغیرهای جهان‌شمول صادرشده) کار نمی‌کند؟ (WHY DOESN'T SET -UX (EXPORTED UNIVERSAL VARIABLES) SEEM TO WORK?)" .sp یک متغیر سراسری (global) با همین نام از قبل وجود دارد. .sp متغیرهای محیطی نظیر \fBEDITOR\fP یا \fBTZ\fP را می‌توان با استفاده از \fBset \-Ux\fP به صورت جهان‌شمول (universal) تنظیم کرد. با این حال، اگر پیش از آغاز به کار فیش متغیر محیطی از قبل مقداردهی شده باشد (مثلاً توسط اسکریپت‌های ورود به سیستم یا مدیران سیستم)، آن متغیر به عنوان یک متغیر سراسری وارد فیش می‌شود. حوزه‌های متغیرها \%<#\:variables-scope> از «داخل به خارج» جستجو می‌شوند، بدین معنا که ابتدا متغیرهای محلی، سپس متغیرهای سراسری و در نهایت متغیرهای جهان‌شمول بررسی می‌گردند. .sp این بدان معناست که مقدار سراسری بر مقدار جهان‌شمول اولویت و تقدم دارد. .sp برای پیشگیری از این مشکل، می‌توانید تنظیمی را که فیش به ارث می‌برد تغییر دهید. اگر این کار امکان‌پذیر نیست، دستوری را به فایل پیکربندی خود \%<#\:configuration> (معمولاً \fB~/.config/fish/config.fish\fP) بیفزایید: .INDENT 0.0 .INDENT 3.5 .sp .EX set \-gx EDITOR vim .EE .UNINDENT .UNINDENT .SH "چگونه در هر بار ورود دستوری را اجرا کنم؟ معادل bashrc. یا profile. در فیش چیست؟ (HOW DO I RUN A COMMAND EVERY LOGIN? WHAT'S FISH'S EQUIVALENT TO .BASHRC OR .PROFILE?)" .sp فایل \fB~/.config/fish/config.fish\fP [1] را ویرایش کنید؛ در صورتی که وجود ندارد آن را بسازید (به نقطه ابتدای نام فایل توجه داشته باشید). .sp بر خلاف bashrc. و profile.، این فایل همواره خوانده می‌شود؛ حتی در پوسته‌های غیرتعاملی یا هنگام ورود به سیستم. .sp برای اجرای یک دستور صرفاً در پوسته‌های تعاملی، دستور \fBstatus is\-interactive\fP را به این شکل بررسی کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX if status is\-interactive # use the coolbeans theme fish_config theme choose coolbeans end .EE .UNINDENT .UNINDENT .IP [1] 5 بخش \(dq~/.config\(dq در این مسیر می‌تواند از طریق متغیر $XDG_CONFIG_HOME تنظیم شود؛ این مسیر صرفاً مقدار پیش‌فرض است. .SH "چگونه اعلان خط فرمان (پرامپت) خود را تنظیم کنم؟ (HOW DO I SET MY PROMPT?)" .sp اعلان خط فرمان خروجی تابع \fBfish_prompt\fP است. آن را در مسیر \fB~/.config/fish/functions/fish_prompt.fish\fP قرار دهید. برای نمونه، یک اعلان ساده به شکل زیر است: .INDENT 0.0 .INDENT 3.5 .sp .EX function fish_prompt set_color $fish_color_cwd echo \-n (prompt_pwd) set_color \-\-reset echo \-n \(aq > \(aq end .EE .UNINDENT .UNINDENT .sp همچنین می‌توانید از ابزار پیکربندی تحت وب، fish_config \%<>، برای پیش‌نمایش و انتخاب از میان گالری اعلان‌های نمونه استفاده کنید. .sp یا اینکه می‌توانید از دستور fish_config در خط فرمان بهره ببرید: .INDENT 0.0 .INDENT 3.5 .sp .EX > fish_config prompt show # displays all the prompts fish ships with > fish_config prompt choose disco # loads the disco prompt in the current shell > fish_config prompt save # makes the change permanent .EE .UNINDENT .UNINDENT .sp چنانچه مایل به ویرایش اعلان موجود خود هستید، می‌توانید از funced \%<> و funcsave \%<> استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX >_ funced fish_prompt # This opens up your editor (set in $EDITOR). # Modify the function, # save the file and repeat to your liking. # Once you are happy with it: >_ funcsave fish_prompt .EE .UNINDENT .UNINDENT .sp این موضوع در مورد fish_right_prompt \%<> و fish_mode_prompt \%<> نیز صدق می‌کند. .SH "چرا اعلان خط فرمان من [I] را نشان می‌دهد؟ (WHY DOES MY PROMPT SHOW A [I]?)" .sp این مورد همان fish_mode_prompt \%<> است. هنگامی که با دستور \fBfish_vi_key_bindings\fP حالت vi را فعال کرده باشید، این نشانگر به صورت پیش‌فرض نمایش داده می‌شود. .sp اگر حالت vi را عمداً فعال نکرده‌اید، ممکن است یک تم یا افزونه متفرقه نصب کرده باشید که این کار را انجام می‌دهد. .sp اگر می‌خواهید این نمایش را تغییر دهید یا غیرفعال کنید، تابع \fBfish_mode_prompt\fP را مثلاً با استفاده از funced \%<> ویرایش کنید. .SH "چگونه رنگ‌های برجسته‌سازی نحو را سفارشی‌سازی کنم؟ (HOW DO I CUSTOMIZE MY SYNTAX HIGHLIGHTING COLORS?)" .sp از ابزار پیکربندی تحت وب که توسط fish_config \%<> راه‌اندازی می‌شود استفاده کنید، یا مجموعه متغیرهای محیطی fish_color \%<#\:variables-color> را تغییر دهید، یا از زیردستور fish_config theme \%<> به این شکل بهره ببرید: .INDENT 0.0 .INDENT 3.5 .sp .EX > fish_config theme show # to demonstrate all the colorschemes > fish_config theme choose coolbeans # to load the \(dqcoolbeans\(dq theme .EE .UNINDENT .UNINDENT .SH "چگونه پیام خوش‌آمدگویی را تغییر دهم؟ (HOW DO I CHANGE THE GREETING MESSAGE?)" .sp مقدار متغیر \fBfish_greeting\fP را تغییر دهید یا یک تابع fish_greeting \%<> ایجاد کنید. برای نمونه، جهت حذف پیام خوش‌آمدگویی از دستور زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX set \-U fish_greeting .EE .UNINDENT .UNINDENT .sp یا چنانچه ترجیح می‌دهید از متغیر جهان‌شمول استفاده نکنید، دستور زیر را به کار ببرید: .INDENT 0.0 .INDENT 3.5 .sp .EX set \-g fish_greeting .EE .UNINDENT .UNINDENT .sp در فایل config.fish \%<#\:configuration>\&. .SH "چگونه دستوری را از تاریخچه اجرا کنم؟ (HOW DO I RUN A COMMAND FROM HISTORY?)" .sp بخشی از دستور را تایپ کرده و سپس کلیدهای پیکان \fBبالا\fP (\fB↑\fP) یا \fBپایین\fP (\fB↓\fP) را بفشارید تا میان تطابق‌های تاریخچه پیمایش کنید، یا کلیدهای \fBctrl\fP\-\fBr\fP را بزنید تا تاریخچه در یک صفحه‌بندی‌کننده (pager) قابل جستجو باز شود. در این صفحه‌بندی‌کننده می‌توانید به ترتیب با زدن \fBctrl\fP\-\fBr\fP یا \fBctrl\fP\-\fBs\fP میان تاریخچه‌های قدیمی‌تر یا جدیدتر حرکت کنید. .sp کلیدهای میان‌بر پیش‌فرض دیگر شامل \fBctrl\fP\-\fBp\fP (بالا) و \fBctrl\fP\-\fBn\fP (پایین) هستند. برای اطلاعات بیشتر بخش تاریخچه دستورات قابل جستجو \%<#\:history-search> را مشاهده کنید. .SH "چرا جایگزینی تاریخچه (مانند \"!$\" و غیره) کار نمی‌کند؟ (WHY DOESN'T HISTORY SUBSTITUTION (\"!$\" ETC.) WORK?)" .sp زیرا جایگزینی تاریخچه یک رابط کاربری نامناسب است که پیش از امکان‌پذیر شدن ویرایش تعاملی خط فرمان اختراع شده بود. فیش به جای افزودن این شبه‌نحو، امکانات جستجو و بازیابی عالی در تاریخچه را برگزیده است. مهاجرت به این سبک نیازمند تغییری کوچک در عادت‌ها است: اگر می‌خواهید خط یا واژه‌ای قدیمی را اصلاح کنید، ابتدا آن را فراخوانی کرده و سپس ویرایش کنید. .sp به عنوان یک حالت ویژه، در بیشتر مواقع جایگزینی تاریخچه به صورت \fBsudo !!\fP به کار می‌رود. در این شرایط کلیدهای \fBalt\fP\-\fBs\fP را بفشارید تا آخرین خط فرمان شما با پیشوند \fBsudo\fP فراخوانی شود (یا در صورت وجود هر متنی در خط فرمان فعلی، پیشوند \fBsudo\fP را روی آن فعال یا غیرفعال کند). .sp به طور کلی، بازیابی تاریخچه در فیش به این شکل عمل می‌کند: .INDENT 0.0 .IP \(bu 2 مشابه سایر پوسته‌ها، کلید پیکان بالا (\fBup\fP) خطوط کامل را از آخرین خط اجراشده فراخوانی می‌کند؛ بنابراین به جای تایپ \fB!!\fP، کافی است کلید پیکان بالا را فشار دهید. .IP \(bu 2 اگر خط موردنظر شما مربوط به گذشته‌های دورتر در تاریخچه است، بخشی از آن خط را تایپ کرده و سپس یک یا چند بار کلید پیکان بالا را بزنید. با این کار خطوط فراخوانی‌شده بر اساس این متن فیلتر می‌شوند و بسیار سریع‌تر به خط موردنظرتان می‌رسید. این سازوکار جایگزین دستوراتی چون \(dq!vi\(dq، \(dq!?bar.c\(dq و مانند آن است. در صورتی که تمایل دارید زمینه و بافت بیشتری را مشاهده کنید، می‌توانید \fBctrl\-r\fP را بزنید تا تاریخچه در صفحه‌بندی‌کننده باز شود. .IP \(bu 2 کلید \fBalt\-up\fP آرگومان‌ها را به صورت تکی از آخرین آرگومان در آخرین خط اجراشده فراخوانی می‌کند. این قابلیت می‌تواند به جای \(dq!$\(dq به کار رود. .UNINDENT .sp برای جزئیات بیشتر درباره ویرایش خط در فیش، مستندات ویرایشگر \%<#\:editor> را ببینید. .sp با این وجود، می‌توانید با استفاده از کوتاه‌نوشت‌ها (Abbreviations) \%<#\:abbreviations> جایگزینی تاریخچه را پیاده‌سازی کنید. در اینجا فقط برای \fB!!\fP آورده شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX function last_history_item; echo $history[1]; end abbr \-a !! \-\-position anywhere \-\-function last_history_item .EE .UNINDENT .UNINDENT .sp این دستور را اجرا کنید تا در هر کجای خط فرمان، \fB!!\fP با آخرین مدخل تاریخچه جایگزین شود. برای ماندگار شدن، آن را در config.fish \%<#\:configuration> قرار دهید. .SH "چگونه یک زیردستور را اجرا کنم؟ بک‌تیک کار نمی‌کند! (HOW DO I RUN A SUBCOMMAND? THE BACKTICK DOESN'T WORK!)" .sp پوسته \fBfish\fP برای زیردستورها از پرانتز استفاده می‌کند. برای نمونه: .INDENT 0.0 .INDENT 3.5 .sp .EX for i in (ls) echo $i end .EE .UNINDENT .UNINDENT .sp همچنین فیش از نحو آشنای \fB$()\fP حتی درون نقل‌قول‌ها نیز پشتیبانی می‌کند. کاراکتر بک‌تیک (backtick) پشتیبانی نمی‌شود زیرا استفاده از آن حتی در پوسته‌های POSIX نیز منع شده است؛ این نویسه‌ها قابلیت تودرتویی ضعیفی دارند و تمایز آن‌ها از نقل‌قول تکی (\fB\(aq\(aq\fP) دشوار است. .SH "خروجی دستور من (مانند pkg-config) به صورت یک رشته متنی بلند ظاهر می‌شود؟ (MY COMMAND (PKG-CONFIG) GIVES ITS OUTPUT AS A SINGLE LONG STRING?)" .sp بر خلاف سایر پوسته‌ها، فیش خروجی جایگزینی دستورات را تنها بر اساس خطوط جدید (newline) تفکیک می‌کند، نه بر مبنای فاصله‌ها، تب‌ها یا نویسه‌های موجود در $IFS. .sp این بدان معناست که اگر دستور زیر را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX count (printf \(aq%s \(aq a b c) .EE .UNINDENT .UNINDENT .sp مقدار \fB1\fP چاپ خواهد شد، زیرا عبارت \(dqa b c \(dq به صورت یکپارچه به کار گرفته شده است. اما اگر بنویسید: .INDENT 0.0 .INDENT 3.5 .sp .EX count (printf \(aq%s\en\(aq a b c) .EE .UNINDENT .UNINDENT .sp مقدار \fB3\fP چاپ می‌شود، چرا که آرگومان‌های \(dqa\(dq، \(dqb\(dq و \(dqc\(dq را به صورت جداگانه به دستور \fBcount\fP داده است. .sp در بیشتر مواقع، تفکیک بر پایه فاصله‌ها ناخواسته است، بنابراین این رفتار یک بهبود به شمار می‌رود؛ در واقع به همین دلیل است که معمولاً درباره مشکلات نام فایل‌های حاوی فاصله می‌شنوید. .sp با این حال گاهی اوقات، به ویژه با ابزارهایی مانند \fBpkg\-config\fP و برنامه‌های مرتبط، تفکیک بر پایه فاصله مورد نیاز است. .sp در این حالت‌ها از \fBstring split \-n \(dq \(dq\fP به شکل زیر استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX g++ example_01.cpp (pkg\-config \-\-cflags \-\-libs gtk+\-2.0 | string split \-n \(dq \(dq) .EE .UNINDENT .UNINDENT .sp گزینه \fB\-n\fP باعث می‌شود عناصر خالی حذف شوند، مشابه رفتاری که پوسته‌های POSIX انجام می‌دهند. .SH "چگونه وضعیت خروج (Exit Status) یک دستور را به دست آورم؟ (HOW DO I GET THE EXIT STATUS OF A COMMAND?)" .sp از متغیر \fB$status\fP استفاده کنید. این متغیر جایگزین متغیر \fB$?\fP در سایر پوسته‌ها است. .INDENT 0.0 .INDENT 3.5 .sp .EX somecommand if test $status \-eq 7 echo \(dqThat\(aqs my lucky number!\(dq end .EE .UNINDENT .UNINDENT .sp اگر فقط بررسی موفقیت یا عدم موفقیت دستور برایتان مهم است، می‌توانید دستور را مستقیماً به عنوان شرط دستور if اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX if somecommand echo \(dqCommand succeeded\(dq else echo \(dqCommand failed\(dq end .EE .UNINDENT .UNINDENT .sp یا چنانچه می‌خواهید در صورت موفقیت یا شکست دستور اول، دستور دیگری اجرا شود، از \fBand\fP یا \fBor\fP استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX somecommand or someothercommand .EE .UNINDENT .UNINDENT .sp برای اطلاعات بیشتر، بخش شرایط \%<#\:syntax-conditional> و مستندات test \%<> و if \%<> را مشاهده کنید. .SH "دستور من خطای \"هیچ تطابقی برای نویسه عام پیدا نشد\" می‌دهد اما در بش کار می‌کند (MY COMMAND PRINTS \"NO MATCHES FOR WILDCARD\" BUT WORKS IN BASH)" .sp به طور خلاصه: نویسه عام (wildcard) را نقل‌قول \%<#\:quotes> یا گریزدهی (escape) \%<#\:escapes> کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX scp user@ip:/dir/\(dqstring\-*\(dq .EE .UNINDENT .UNINDENT .sp هنگامی که فیش علامت ستاره \fB*\fP بدون نقل‌قول را می‌بیند، بسط نویسه عام \%<#\:expand-wildcard>\& را انجام می‌دهد. این بدان معناست که تلاش می‌کند نام فایل‌ها را با رشته داده‌شده تطبیق دهد. .sp اگر نویسه عام با هیچ فایلی تطابق نداشته باشد، فیش به جای اجرای دستور یک پیام خطا چاپ می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX > echo *this*does*not*exist fish: No matches for wildcard \(aq*this*does*not*exist\(aq. See \(gahelp expand\(ga. echo *this*does*not*exist ^ .EE .UNINDENT .UNINDENT .sp حال، پوسته bash نیز در چنین وضعیتی تلاش می‌کند فایل‌ها را تطبیق دهد، اما هنگامی که تطابقی پیدا نمی‌کند، رشته واقعی نویسه عام را بدون تغییر ارسال می‌نماید. .sp این بدان معناست که دستوراتی مانند مثال فوق: .INDENT 0.0 .INDENT 3.5 .sp .EX scp user@ip:/dir/string\-* .EE .UNINDENT .UNINDENT .sp یا .INDENT 0.0 .INDENT 3.5 .sp .EX apt install postgres\-* .EE .UNINDENT .UNINDENT .sp به نظر می‌رسد که به درستی کار می‌کنند، زیرا بیشتر اوقات رشته تطابقی پیدا نمی‌کند و در نتیجه عبارت \fBstring\-*\fP ارسال می‌شود که توسط برنامه مقصد تفسیر می‌گردد. .sp اما این موضوع همچنین به این معنی است که هر لحظه با ایجاد یک فایل مطابق یا اجرای دستور در یک پوشه کاری متفاوت، ممکن است این دستورات از کار بیفتند؛ و برای مقابله با این مشکل bash به راهکارهای دورزدن نظیر این نیاز دارد: .INDENT 0.0 .INDENT 3.5 .sp .EX for f in ./*.mpg; do # We need to test if the file really exists because # the wildcard might have failed to match. test \-f \(dq$f\(dq || continue mympgviewer \(dq$f\(dq done .EE .UNINDENT .UNINDENT .sp (برگرفته از \%) .sp به همین دلایل، فیش چنین رفتاری ندارد و در عوض انتظار دارد ستاره‌ها در صورتی که قرار نیست بسط داده شوند، داخل نقل‌قول یا گریزدهی قرار گیرند. .sp این رفتار مشابه گزینه \(dqfailglob\(dq در پوسته bash است. .SH "چرا هنگامی که فیش پوسته ورود من است اتصالات SSH/SCP/RSYNC دچار مشکل می‌شوند؟ (WHY WON'T SSH/SCP/RSYNC CONNECT PROPERLY WHEN FISH IS MY LOGIN SHELL?)" .sp این مشکل ممکن است با پیام‌هایی نظیر \(dq\fBReceived message too long\fP\(dq، \(dq\fBopen terminal failed: not a terminal\fP\(dq، \(dq\fBBad packet length\fP\(dq، یا \(dq\fBConnection refused\fP\(dq همراه با خروجی‌های عجیب در پیام‌های \fBssh_exchange_identification\fP در گزارش اشکال‌زدایی نمایان شود. .sp این اتفاق معمولاً به این دلیل رخ می‌دهد که فیش فایل پیکربندی کاربر \%<#\:configuration> (\fB~/.config/fish/config.fish\fP) را \fIهمواره\fP می‌خواند؛ چه پوسته تعاملی باشد، چه پوسته ورود، چه غیرتعاملی و چه غیرورود. .sp این رفتار کارها را ساده‌تر می‌کند، اما همچنین بدین معناست که اگر config.fish خروجی متنی تولید کند، این خروجی حتی در پوسته‌های غیرتعاملی نظیر پوسته‌ای که ابزارهای ssh/scp/rsync هنگام اتصال اجرا می‌کنند نیز تولید خواهد شد. .sp هر کدی در config.fish که خروجی تولید می‌کند باید با بررسی شرط \fBstatus is\-interactive\fP (یا در صورت تمایل \fBstatus is\-login\fP) محافظت شود: .INDENT 0.0 .INDENT 3.5 .sp .EX if status is\-interactive ... end .EE .UNINDENT .UNINDENT .sp همین موضوع برای نمونه هنگامی صادق است که \fBtmux\fP را بدون محافظ در config.fish اجرا کنید، که باعث ایجاد پیامی مانند \fBsessions should be nested with care, unset $TMUX to force\fP می‌گردد. .SH "با اشکالات گرافیکی عجیب (اثر پلکانی، نویسه‌های شبح، مکان‌نمای نابجا و...) مواجه می‌شوم؟ (I'M GETTING WEIRD GRAPHICAL GLITCHES (A STAIRCASE EFFECT, GHOST CHARACTERS, CURSOR IN THE WRONG POSITION,...)?)" .sp در یک ترمینال، برنامه در حال اجرا و خود ترمینال باید بر سر پهنای نویسه‌ها توافق داشته باشند تا حرکت مکان‌نما به درستی مدیریت شود. .sp این امر برای فیش بیش از سایر پوسته‌ها اهمیت دارد، زیرا قابلیت‌هایی چون برجسته‌سازی نحو و پیشنهادهای خودکار با جابجایی مکان‌نما پیاده‌سازی شده‌اند. .sp گاهی اوقات بر سر پهنای نویسه‌ها ناهماهنگی پیش می‌آید. این موضوع علل و راه‌حل‌های متعددی دارد: .INDENT 0.0 .IP \(bu 2 ممکن است نویسه موردنظر برای سیستم شما بیش از حد جدید باشد و سیستم آن را نشناسد \- در این حالت باید از به‌کارگیری آن نویسه خودداری کنید. .IP \(bu 2 ممکن است فیش یا ترمینال شما نویسه را نشناسند یا با آن اشتباه برخورد کنند \- در این حالت باید فیش یا ترمینال اصلاح شود یا نسخه به‌روزرسانی‌شده آن را نصب کنید. .IP \(bu 2 نویسه دارای پهنای «مبهم» (ambiguous) است و فیش پهنای آن را برابر X در نظر می‌گیرد در حالی که ترمینال آن را Y می‌داند. در این حالت یا باید پیکربندی ترمینال را تغییر دهید یا متغیر $fish_ambiguous_width را روی مقدار صحیح تنظیم کنید. .IP \(bu 2 نویسه یک ایموجی (emoji) است و سیستم شما تنها از یونیکد ۸ پشتیبانی می‌کند. در این حالت متغیر $fish_emoji_width را برابر 1 قرار دهید. .UNINDENT .sp این امر همچنین بدین معناست که چند مورد قابل پشتیبانی نیستند: .INDENT 0.0 .IP \(bu 2 قلم‌های با پهنای نامساوی (غیر تک‌فاصله یا Non-monospace) \- \fBهیچ راهی\fP برای فیش وجود ندارد تا پهنای یک نویسه خاص را تشخیص دهد، زیرا فیش تأثیری بر رندرینگ قلم ترمینال ندارد. .IP \(bu 2 پهناهای متفاوت برای چندین نویسه با پهنای مبهم \- هیچ راهی وجود ندارد که فیش بفهمد شما چه پهنایی را به هر یک از این نویسه‌ها اختصاص داده‌اید. .UNINDENT .SH "فیش در یک ترمینال خاص کار نمی‌کند (FISH DOES NOT WORK IN A SPECIFIC TERMINAL)" .sp ممکن است ترمینال تمام پیش‌نیازهای فیش \%<> را برآورده نکند. لطفاً این مشکل را در سامانه پیگیری اشکالات ترمینال خود و فیش گزارش دهید. .SH "حذف نصب فیش (UNINSTALLING FISH)" .sp چنانچه می‌خواهید فیش را حذف نصب کنید، ابتدا اطمینان حاصل نمایید که فیش به عنوان پوسته پیش‌فرض شما تنظیم نشده باشد. اگر مطمئن نیستید، دستور \fBchsh \-s /bin/bash\fP را اجرا کنید. .sp اگر فیش را با یک مدیر بسته نصب کرده‌اید، از دستور حذف همان مدیر بسته استفاده کنید. اگر فیش را خودتان کامپایل و نصب کرده‌اید، با فرض اینکه آن را در مسیر usr/local/ نصب کرده باشید، دستورات زیر را اجرا کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX rm \-Rf /usr/local/etc/fish /usr/local/share/fish ~/.config/fish rm /usr/local/share/man/man1/fish*.1 cd /usr/local/bin rm \-f fish fish_indent .EE .UNINDENT .UNINDENT .SH "نویسنده (AUTHOR)" توسعه‌دهندگان پوسته fish .SH "حق نشر (COPYRIGHT)" توسعه‌دهندگان پوسته fish .\" End of generated man page.