فيش (صدفة يونكس)
fish ( صدفة تفاعلية سهلة الاستخدام ؛ مكتوبة بأحرف صغيرة) هي صدفة شبيهة بنظام يونكس، تركز على التفاعل وسهولة الاستخدام. صُممت fish لتكون غنية بالميزات افتراضيًا، وليست قابلة للتخصيص بشكل كبير، [ 8 ] ولا تلتزم بمعايير POSIX للصدف عمدًا. [ 9 ]
سمات
يعرض برنامج fish اقتراحات تدريجية أثناء كتابة المستخدم، استنادًا إلى سجل الأوامر والمجلد الحالي. تعمل هذه الميزة بشكل مشابه لخاصية البحث في سجل الأوامر في Bash ، ولكنها تعمل باستمرار، مما يوفر للمستخدم ملاحظات متواصلة أثناء كتابة الأوامر. يتضمن fish أيضًا ميزة إكمال متقدمة باستخدام مفتاح Tab ، مع دعم لتوسيع مسارات الملفات (باستخدام الأحرف البديلة وتوسيع الأقواس )، ومتغيرات البيئة ، وإكمالات خاصة بالأوامر. يمكن توليد بعض الإكمالات الخاصة بالأوامر، بما في ذلك الخيارات مع أوصافها، من صفحات دليل الأوامر ، ولكن يمكن أيضًا تضمين إكمالات مخصصة مع البرامج أو كتابتها من قِبل مستخدمي الصدفة. [ 10 ]CtrlR
فضّل مبتكر برنامج Fish إضافة الميزات الجديدة كأوامر بدلاً من صيغ برمجية. وقد سهّل هذا الأمر اكتشاف الميزات ، إذ تسمح الميزات المدمجة بالبحث عن الأوامر باستخدام الخيارات ونصوص المساعدة. كما يمكن أن تتضمن الدوال أوصافًا سهلة القراءة. ويتيح أمر مساعدة خاص الوصول إلى جميع وثائق Fish في متصفح الويب الخاص بالمستخدم . [ 11 ]
بناء الجملة
يشبه بناء الجملة غلافًا متوافقًا مع POSIX (مثل Bash)، ولكنه ينحرف في نواحٍ عديدة [ 12 ]
# تعيين المتغيرات # # عيّن قيمة المتغير 'foo' إلى 'bar'. # لا يستخدم fish عامل المساواة (=)، لأنه حساس للمسافات البيضاء بطبيعته. # يمتد الأمر 'set' ليشمل العمل مع المصفوفات، ونطاق المتغيرات، وما إلى ذلك.> تعيين شريط foo > صدى $foo حاجِز # استبدال الأوامر # # قم بتعيين ناتج الأمر 'pwd' إلى المتغير 'wd'. # لا يستخدم fish علامات التنصيص المائلة (``)، والتي لا يمكن تداخلها وقد يتم الخلط بينها وبين علامات الاقتباس المفردة (' ').> تعيين دليل العمل ( pwd ) > تعيين دليل العمل $( pwd ) # منذ الإصدار 3.4 > طباعة $wd ~ # متغيرات المصفوفة. تصبح 'A' مصفوفة بخمس قيم: > set A 3 5 7 9 12 # تقطيع المصفوفة. تصبح 'B' أول عنصرين من 'A': > set B $A [ 1 2 ] > echo $B 3 5 # يمكنك استخدام الفهرسة مع مصفوفات أخرى وحتى أوامر # استبدال المخرجات: > echo $A [( seq 3 )] 3 5 7 # امسح العنصرين الثالث والخامس من 'A' > set --erase A [ $B ] > echo $A 3 5 9 # حلقة for، تحويل صور JPEG إلى صور PNG > for i in *.jpg تحويل $i ( basename $i .jpg ) .png نهايةيدعم برنامج Fish سجل التصفح متعدد الأسطر والتحرير. تعمل الفواصل المنقوطة كأُسطر جديدة: > for i in *.jpg ; convert $i ( basename $i .jpg ) .png ; end# حلقة while، اقرأ الأسطر من الملف /etc/passwd واطبع الحقل الخامس # مفصولًا بنقطتين رأسيتين من الملف. يجب أن يكون هذا # وصف المستخدم. > while read line set arr ( echo $line | tr : \n ) echo $arr [ 5 ] end < /etc/passwd # استبدال السلاسل النصية (استبدال جميع الأحرف i بالحرف I) > string replace -a "i" "I" "Wikipedia" ويكيبيديا لا يوجد غلاف فرعي ضمني
بعض بنيات اللغة، مثل خطوط الأنابيب والدوال والحلقات ، تُنفذ باستخدام ما يُسمى بالأصداف الفرعية في لغات الصدفة الأخرى. الأصداف الفرعية هي برامج تابعة تُنفذ بضعة أوامر لأداء مهمة معينة، ثم تعود إلى الصدفة الرئيسية. عادةً ما يكون لهذا التفصيل في التنفيذ أثر جانبي يتمثل في أن أي تغييرات في الحالة تُجرى في الصدفة الفرعية، مثل تعيين قيم المتغيرات، لا تنتقل إلى الصدفة الرئيسية. لا يُنشئ برنامج fish أصدافًا فرعية لميزات اللغة؛ فجميع الأوامر المدمجة تُنفذ داخل الصدفة الرئيسية.
# لن ينجح هذا في العديد من الصدفات الأخرى، لأن الأمر المدمج 'read' # سيعمل في صدفة فرعية خاصة به. في Bash، لا يمكن أن يكون للجانب الأيمن من الأنبوب # أي آثار جانبية. في ksh، يعمل الأمر أدناه، لكن # لا يمكن أن يكون للجانب الأيسر أي آثار جانبية. في fish و zsh، # يمكن أن يكون لكلا الجانبين آثار جانبية. > cat *.txt | read line مثال على تعيين المتغيرات
لا يقوم مثال Bash هذا بما يبدو عليه: لأن جسم الحلقة عبارة عن غلاف فرعي، فإن التحديث إلى $foundليس دائمًا.
تم العثور على = '' cat /etc/fstab | while read dev mnt rest ; do if test " $mnt " = "/" ; then found = " $dev " fi doneحل بديل:
تم العثور على = '' بينما قراءة dev mnt rest ؛ نفّذ إذا كان اختبار " $mnt " = "/" ؛ ثم تم العثور على = " $dev " fi تم < /etc/fstab مثال على السمك:
set found '' cat /etc/fstab | while read dev mnt rest if test " $mnt " = "/" set found $dev end endالمتغيرات العامة
يحتوي برنامج fish على ميزة تُعرف باسم المتغيرات العامة، والتي تسمح للمستخدم بتعيين قيمة دائمة لمتغير ما في جميع واجهات fish المُشغّلة لديه. يتم حفظ قيمة المتغير بعد تسجيل الخروج وإعادة تشغيل الجهاز، وتُطبّق التحديثات فورًا على جميع الواجهات المُشغّلة.
# سيجعل هذا إيماكس محرر النصوص الافتراضي. يُخبر الخيار '--universal' (أو '-U') برنامج فيش بجعل هذا متغيرًا عامًا. > set --universal EDITOR emacs # سيجعل هذا الأمر دليل العمل الحالي جزءًا من موجه أوامر fish # وسيُشغّل اللون الأزرق على جميع مثيلات fish قيد التشغيل. > set --universal fish_color_cwd blue ميزات أخرى
- إكمال متقدم للعلامات (مع دعم لكتابة عمليات إكمال مخصصة).
- تمييز بناء الجملة مع فحص شامل للأخطاء.
- دعم الحافظة X.
- معالجة ذكية للطرفيات تعتمد على معلومات الطرفية .
- سجل الأوامر القابل للبحث .
- التكوين عبر الويب (fish_config). [ 13 ]
جدول ترجمة Bash/fish
| ميزة | بناء جملة باش | تركيب الجملة السمكي | تعليق |
|---|---|---|---|
| توسيع المتغيرات: مع تقسيم الكلمات وتفسير الكلمات العامة | $var أو ${var[@]}أو ${var[*]} | تم حذفه عمداً | تم تحديدها كسبب رئيسي للأخطاء في لغات shell المتوافقة مع posix [ 14 ] |
| توسيع المتغير: عددي | "$var" | تم حذفه عمداً | كل متغير عبارة عن مصفوفة |
| توسيع المتغير: مصفوفة | "${var[@]}" | $var | لا داعي لوضع علامات الاقتباس لمنع تقسيم الكلمات وتفسيرها بشكل عام. بل إن وضع علامات الاقتباس يدل على التسلسل. |
| توسيع المتغير: كسلسلة مفصولة بمسافات | "${var[*]}" | "$var" | |
| قم بتحرير السطر في محرر النصوص | Ctrl+X ، +CtrlE | Alt+E | عند الاستدعاء، يتم نقل إدخال السطر إلى محرر النصوص |
| تقييم مدخلات الخط | Ctrl++AltE | غير متوفر [ 15 ] | يقوم بتقييم التعبيرات في مكانها على محرر الأسطر |
| إكمال السجل | Ctrl+R | ضمني | |
| استبدال التاريخ | !! | تم حذفه عمداً | غير قابل للاكتشاف |
| غلاف فرعي صريح | (تعبير) | تعبير fish -c | |
| استبدال الأوامر | "$(تعبير)" |
| |
| استبدال العملية | <(تعبير) | (تعبير | psub) | الأمر، وليس الصيغة |
| عوامل التشغيل المنطقية | !cmd && echo FAIL || echo OK | لا تقم بالأمر واطبع "فشل" أو " موافق". | |
| تعيين المتغيرات | المتغير = القيمة | تحديد قيمة المتغير | |
| معالجة السلاسل النصية: استبدال | "${HOME/alice/bob}" | استبدال السلسلة alice bob $HOME | |
| معالجة السلاسل النصية: إزالة نمط البادئة أو اللاحقة، بطريقة غير جشعة أو جشعة | var = abc " ${ var #*. } " #bc " ${ var ##*. } " #c " ${ var %.* } " #ab " ${ var %%.* } " #a | استبدال السلسلة --regex '.*?\.(.*)' '$1' abc #bc استبدال السلسلة --regex '.*\.(.*)' '$1' abc #c استبدال السلسلة --regex '(.*)\..*' '$1' abc #ab استبدال السلسلة --regex '(.*?)\..*' '$1' abc #a | |
| متغير التصدير | تصدير متغير | set --export var | خيارات يمكن اكتشافها عبر خاصية الإكمال التلقائي باستخدام زر Tab |
| دالة - متغير محلي | متغير محلي | افتراضيا | |
| متغير محلي النطاق | لا يوجد ما يعادله | تعيين متغير محلي | |
| إزالة المتغير | إلغاء تعيين المتغير | set --erase var | |
| تحقق مما إذا كان المتغير موجودًا | اختبار -v متغير | تعيين متغير الاستعلام -- | |
| تهيئة المصفوفة | var=( abc ) | قم بتعيين المتغير abc | كل متغير عبارة عن مصفوفة |
| تكرار المصفوفة | for i in " ${ var [@] } " ; do echo " $i " done | for i in $var echo $i end | |
| متجه الوسائط: جميع الوسائط | "$@" | $argv | |
| متجه الوسائط: الفهرسة | "$1" | $argv[1] | |
| متجه الوسائط: الطول | $# | (عدد $argv) | |
| متجه الوسائط: إزاحة | يحول | set --erase argv [ 1 ] | |
| تمثيل المصفوفات في متغيرات البيئة | PATH = " $PATH : $HOME /.local/bin" | قم بتعيين PATH $PATH $HOME /.local/bin | يستخدم برنامج fish النقطتين كفاصل للمصفوفات عند ترجمة المتغيرات من وإلى بيئة التشغيل. وهذا يتوافق مع العديد من متغيرات بيئة التشغيل الشبيهة بالمصفوفات، مثل $PATH و$LS_COLORS. |
| تصدير وتشغيل | LANG=C.UTF-8 python3 | env LANG = C.UTF-8 python3 | envLANG=C.UTF-8python3يعمل في أي بيئة طرفية، لأن env برنامج مستقل. |
| الحساب | $((10/3)) | الرياضيات '10/3' | expr10/3يعمل في أي بيئة طرفية، لأن expr برنامج مستقل. |
| تسلسل الهروب | $'\e' | \e | printf'\e'يعمل في كلا الصدفتين؛ printfوتتوافق وظائفهما المدمجة مع printfبرنامج GNU المستقل. [ 16 ] |
| سلسلة نصية مقتبسة بعلامات اقتباس مفردة: تسلسلات الهروب | علامة الخط المائل الأخيرة لكلمة "mom " : | الشرطة المائلة الأخيرة لكلمة "mom " : \\ ' | لا يتطلب Bash سوى استبدال علامة الاقتباس المفردة نفسها في السلاسل النصية المقتبسة بعلامات اقتباس مفردة، ولكن طول الاستبدال 4 أحرف. يعمل الاستبدال نفسه في Fish، لكن Fish يدعم تسلسل هروب عادي لهذا الغرض، وبالتالي يتطلب هروب الشرطات المائلة العكسية أيضًا (باستثناء أنه يسمح باستخدام شرطات مائلة عكسية مفردة لا تسبق شرطة مائلة عكسية أخرى أو علامة اقتباس مفردة). |
انظر أيضاً
مراجع
- ↑ "أعضاء فريق صدفة السمك" . GitHub.com . تم الاطلاع عليه بتاريخ 10 نوفمبر 2025 .
- ↑ "الإصدار 4.8.1" . 13 يوليو 2026. تم الاطلاع عليه في 14 يوليو 2026 .
- ↑ "fish-shell 4.0b1، متوفر الآن بلغة Rust" . fishshell.com . ١٧ ديسمبر ٢٠٢٤. تم الاطلاع عليه بتاريخ ١٨ ديسمبر ٢٠٢٤ .
- ↑ "fish 4.0.0 (صدر في 27 فبراير 2025)" . fishshell.com . تم الاطلاع عليه في 16 أغسطس 2025 .
- ↑ "fish-shell/fish-shell: Commits from 2005-04-07 to 2006-12-31" . GitHub . تم الاطلاع عليه في 7 مايو 2026 .
- ↑ "صدأ صدفة السمك" . fishshell.com . 24 أبريل 2023. تم الاطلاع عليه في 7 مايو 2026 .
- ↑ "الترخيص" . fishshell.com . تم الاطلاع عليه بتاريخ 10 نوفمبر 2025 .
- ↑ ليليانكرانتز، أكسل (17 مايو 2005). "فيش - واجهة سطر أوامر سهلة الاستخدام" . أخبار لينكس الأسبوعية . تم الاطلاع عليه بتاريخ 24 مارس 2010 .
- ↑ "وثائق الأسماك: التصميم" . fishshell.com . تم الاطلاع عليه بتاريخ 9 أبريل 2021 .
- ↑ "كتابة جمل الإكمال الخاصة بك" . fishshell.com . مؤرشف من الأصل في 31 أغسطس 2024. تم الاطلاع عليه في 10 نوفمبر 2025 .
- ↑ "سحر سطر الأوامر: تحسين واجهة سطر الأوامر باستخدام fish" . Linux.com . 13 نوفمبر 2006. تم الاطلاع عليه بتاريخ 10 نوفمبر 2025 .
- ↑ بول، رايان (19 ديسمبر 2005). "نظرة معمقة على لغة البرمجة Fish: الصدفة التفاعلية سهلة الاستخدام" . آرس تكنيكا . تاريخ الاسترجاع: 10 مارس 2015.
تفتقر لغة البرمجة Fish إلى العديد من الميزات أو تعاني من سوء التنفيذ في صيغة POSIX، بما في ذلك نطاق المتغيرات والمصفوفات والدوال. ولهذا السبب، تختلف Fish عن صيغة POSIX في عدة جوانب مهمة.
- ↑ "fish_config – بدء واجهة التكوين عبر الويب" . fishshell.com . تم الاطلاع عليه بتاريخ 10 نوفمبر 2025 .
- ↑ "مزالق باش" . mywiki.wooledge.org . تاريخ الوصول: ١٠ يوليو ٢٠١٦.
تُبيّن هذه الصفحة الأخطاء الشائعة التي يقع فيها مبرمجو باش. (...) ستتجنب العديد من هذه المزالق إذا استخدمت علامات الاقتباس دائمًا، وتجنّبت تمامًا تقسيم الكلمات لأي سبب كان! تقسيم الكلمات ميزة قديمة معيبة موروثة من Bourne shell، وهي مُفعّلة افتراضيًا إذا لم تستخدم علامات الاقتباس للتوسيعات. ترتبط الغالبية العظمى من المزالق بشكل أو بآخر بالتوسيعات غير المُقتبسة، وما ينتج عنها من تقسيم الكلمات ودمجها.
- ↑ dag (16 مايو 2013). "RFC: إضافة ربط لتوسيع/تقييم الرموز المميزة على سطر الأوامر" . GitHub . تم الاسترجاع في 9 أبريل 2021 .
- ↑ نوردال، أندرياس (11 يوليو 2013). "printf لا يدعم \e" . مشاكل مكتبة fish . تم الاطلاع عليه بتاريخ 24 مارس 2016 .
روابط خارجية
- الموقع الرسمي – يحتوي على الوثائق والملفات القابلة للتنزيل

- مشروع fish-shell على GitHub (نشط)
- "سمكة" . جيتوريوس . مؤرشف من الأصل في 26 يوليو 2011.(قديم)
- fish / fish على SourceForge (قديم)
- مستخدمو الأسماك – قائمة نقاش عامة لمستخدمي الأسماك
- قاموس ترجمة شل – جدول ترجمة آخر لـ Bash/fish
- أنظمة يونكس
- برنامج مجاني مكتوب بلغة Rust
- لغات البرمجة النصية
- برنامج يستخدم رخصة جنو العمومية العامة
