عن المشروع
sh هو مُحلّل ومُنسّق ومُفسّر أوامر شل مكتوب بلغة Go الخالصة، ويدعم POSIX Shell وBash وZsh وmksh. يتطلب Go 1.26 أو أحدث.
ينقسم المشروع إلى ثلاث حزم رئيسية. تقوم حزمة syntax بتحليل نصوص الشل إلى شجرة صياغة، مما يتيح فحصها وتنسيقها بالطريقة التي تعمل بها shfmt. وتقدم حزمة shell مساعدات بنداء واحد ذات دلالات شل: تقسيم سطر أوامر إلى وسائط وإعادة اقتباسها (على غرار shlex)، وتوسيع $VAR و~ داخل النصوص، والتوسيع النمطي (globbing) باستخدام ** أو مطابقة أنماط على غرار case. وتشغّل حزمة interp نصوص الشل دون شل نظام، بما في ذلك على Windows؛ وتتيح معالجاتها عزل ما يمكن للنصوص تنفيذه والوصول إليه.
shfmt هو الجزء الأكثر استخدامًا على نطاق واسع في المشروع. يقوم بتنسيق برامج الشل ويمكن تثبيته عبر `go install mvdan.cc/sh/v3/cmd/shfmt@latest`. الاستخدام النموذجي هو `shfmt -l -w script.sh`. ويوضّح syntax/canonical.sh نمطه الافتراضي، وتتوفر صفحة دليل (manpage). تُوزَّع الحزم عبر قنوات عديدة، منها Alpine وArch وDebian وDocker وFedora وFreeBSD وHomebrew وMacPorts وNixOS وOpenSUSE وPyPI وScoop وSnapcraft وVoid وwebi. وتُنشر صور Docker لوسوم الإصدارات، مع `v3` لأحدث إصدار مستقر و`latest` للتطوير؛ وتحتوي الصور على shfmt فقط، مع توفر نسخ Alpine.
تشمل التحذيرات الموثّقة ما يلي: يلزم الاقتباس عند الفهرسة في مصفوفات Bash الترابطية، لأن المُحلّل الساكن يفترض خلاف ذلك تعبيرًا حسابيًا؛ ولا يُدعم الالتباس بين `$((` و`((` لأن التراجع (backtracking) سيعقّد المُحلّل ويمنع البث عبر io.Reader؛ وتُحلَّل `export` و`let` و`declare` ككلمات مفتاحية لتمكين أشجار الصياغة الساكنة ودعم صيغ مثل `declare foo=(bar)`؛ ولأن المكتبة مكتوبة بلغة Go الخالصة، لا يستطيع المُفسّر مطابقة دلالات POSIX Shell وBash بالكامل، فعلى سبيل المثال تستخدم الأصداف الفرعية goroutines بدلًا من عمليات متفرعة، لذا لا تُستخدم معرّفات العمليات (PIDs) وواصفات الملفات الحقيقية مباشرة.
تنص الأسئلة الشائعة حول التنسيق على أنه لا يمكن تعطيل التنسيق لنطاقات أسطر، وأنه يتم تجنّب خيارات التنسيق الجديدة حيثما أمكن، وأن الاتساق يُقدَّر على تلبية كل تفضيل أسلوبي شخصي.
هناك حزمة npm خارجية تُسمى sh-syntax تضم بناء WASM للمُحلّل والمُنسّق؛ أما حزمة mvdan-sh الأقدم القائمة على GopherJS فهي مؤرشفة. وتشمل تكاملات المحررات والأدوات المذكورة BashSupport-Pro وdockerfmt وintellij-shellscript وmicro وneoformat وvscode-shfmt وshfmt.el وTrunk وmodd وprettier-plugin-sh وsh-checker وmdformat-shfmt وpre-commit-shfmt وtesh. ويشير README أيضًا إلى أن رقع الذكاء الاصطناعي العابرة ليست مفيدة إلا إذا كان المساهم مستخدمًا أو مساهمًا نشطًا، ويطلب تقديم تقارير مشكلات مفصّلة بدلًا من ذلك.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.