
nushell v0.115.0
نوع جديد من الشل
Nushell
نوع جديد من الصدفات (Shell).

Table of Contents
- Status
- Learning About Nu
- Installation
- Configuration
- Philosophy
- Goals
- Officially Supported By
- Contributing
- License
Status
وصل هذا المشروع إلى مستوى الجودة الأدنى القابل للاستخدام (minimum-viable-product). يستخدمه العديد من الأشخاص كصدفة يومية لهم، لكنه قد يكون غير مستقر لبعض الأوامر. تصميم Nu قابل للتغيير مع نضوجه.
Learning About Nu
يُعد كتاب Nushell المصدر الأساسي لتوثيق Nushell. يمكنك العثور على قائمة كاملة بأوامر Nu في الكتاب، ولدينا العديد من الأمثلة على استخدام Nu في كتاب الطبخ الخاص بنا.
نحن أيضًا نشطون على Discord؛ تعال وتحدث معنا!
Installation
لتثبيت Nu بسرعة:
# Linux and macOS
brew install nushell
# Windows
winget install nushell
لاستخدام Nu في GitHub Action، راجع setup-nu لمزيد من التفاصيل.
يمكن العثور على تعليمات التثبيت التفصيلية في فصل التثبيت من الكتاب. يتوفر Nu عبر العديد من مديري الحزم:
للحصول على تفاصيل حول المنصات التي يدعمها فريق Nushell بنشاط، راجع سياسة دعم المنصات لدينا.
Configuration
يمكن العثور على التكوينات الافتراضية في sample_config وهي ملفات التكوين التي يحصل عليها المستخدم عند تشغيل Nushell لأول مرة.
وهي تحدد جميع التكوينات الافتراضية لتشغيل Nushell. من هنا يمكن للمستخدم تخصيص هذا الملف ليناسب احتياجاته الخاصة.
لمعرفة مكان ملف config.nu على نظامك، اكتب هذا الأمر ببساطة.
$nu.config-path
يرجى الاطلاع على كتابنا لجميع توثيقات Nushell.
Philosophy
يستلهم Nu الإلهام من مشاريع مثل PowerShell ولغات البرمجة الوظيفية وأدوات سطر الأوامر الحديثة. بدلاً من التفكير في الملفات والبيانات كتدفقات نصية خام، ينظر Nu إلى كل مدخل على أنه شيء له بنية. على سبيل المثال، عند سرد محتويات دليل، ما تحصل عليه هو جدول من الصفوف، حيث يمثل كل صف عنصرًا في ذلك الدليل. يمكن تمرير هذه القيم عبر سلسلة من الخطوات، في سلسلة من الأوامر تسمى "خط أنابيب" (pipeline).
Pipelines
في يونكس، من الشائع استخدام الأنابيب بين الأوامر لتقسيم أمر معقد إلى خطوات متعددة. يأخذ Nu هذه الفكرة خطوة أبعد ويبني بشكل كبير على فكرة خطوط الأنابيب. كما في فلسفة يونكس، يسمح Nu للأوامر بالإخراج إلى stdout والقراءة من stdin. بالإضافة إلى ذلك، يمكن للأوامر إخراج بيانات منظمة (يمكنك التفكير في هذا كنوع ثالث من التدفقات). الأوامر التي تعمل في خط الأنابيب تنقسم إلى واحدة من ثلاث فئات:
- الأوامر التي تنتج تدفقًا (مثل
ls) - الأوامر التي تصفي تدفقًا (مثل
where type == "dir") - الأوامر التي تستهلك مخرجات خط الأنابيب (مثل
table)
تُفصل الأوامر برمز الأنبوب (|) للدلالة على خط أنابيب يتدفق من اليسار إلى اليمين.
ls | where type == "dir" | table
# => ╭────┬──────────┬──────┬─────────┬───────────────╮
# => │ # │ name │ type │ size │ modified │
# => ├────┼──────────┼──────┼─────────┼───────────────┤
# => │ 0 │ .cargo │ dir │ 0 B │ 9 minutes ago │
# => │ 1 │ assets │ dir │ 0 B │ 2 weeks ago │
# => │ 2 │ crates │ dir │ 4.0 KiB │ 2 weeks ago │
# => │ 3 │ docker │ dir │ 0 B │ 2 weeks ago │
# => │ 4 │ docs │ dir │ 0 B │ 2 weeks ago │
# => │ 5 │ images │ dir │ 0 B │ 2 weeks ago │
# => │ 6 │ pkg_mgrs │ dir │ 0 B │ 2 weeks ago │
# => │ 7 │ samples │ dir │ 0 B │ 2 weeks ago │
# => │ 8 │ src │ dir │ 4.0 KiB │ 2 weeks ago │
# => │ 9 │ target │ dir │ 0 B │ a day ago │
# => │ 10 │ tests │ dir │ 4.0 KiB │ 2 weeks ago │
# => │ 11 │ wix │ dir │ 0 B │ 2 weeks ago │
# => ╰────┴──────────┴──────┴─────────┴───────────────╯
نظرًا لأنك في معظم الأوقات سترغب في رؤية مخرجات خط الأنابيب، فإن table مفترض ضمنيًا.
كان بإمكاننا أيضًا كتابة ما سبق بهذه الطريقة:
ls | where type == "dir"
القدرة على استخدام نفس الأوامر وتركيبها بطرق مختلفة هي فلسفة مهمة في Nu.
على سبيل المثال، يمكننا استخدام الأمر المدمج ps للحصول على قائمة بالعمليات الجارية، باستخدام نفس where كما في الأعلى.
ps | where cpu > 0
# => ╭───┬───────┬───────────┬───────┬───────────┬───────────╮
# => │ # │ pid │ name │ cpu │ mem │ virtual │
# => ├───┼───────┼───────────┼───────┼───────────┼───────────┤
# => │ 0 │ 2240 │ Slack.exe │ 16.40 │ 178.3 MiB │ 232.6 MiB │
# => │ 1 │ 16948 │ Slack.exe │ 16.32 │ 205.0 MiB │ 197.9 MiB │
# => │ 2 │ 17700 │ nu.exe │ 3.77 │ 26.1 MiB │ 8.8 MiB │
# => ╰───┴───────┴───────────┴───────┴───────────┴───────────╯
Opening files
يمكن لـ Nu تحميل محتويات الملفات وعناوين URL كنص خام أو كبيانات منظمة (إذا تعرف على التنسيق). على سبيل المثال، يمكنك تحميل ملف .toml كبيانات منظمة واستكشافه:
open Cargo.toml
# => ╭──────────────────┬────────────────────╮
# => │ bin │ [table 1 row] │
# => │ dependencies │ {record 25 fields} │
# => │ dev-dependencies │ {record 8 fields} │
# => │ features │ {record 10 fields} │
# => │ package │ {record 13 fields} │
# => │ patch │ {record 1 field} │
# => │ profile │ {record 3 fields} │
# => │ target │ {record 3 fields} │
# => │ workspace │ {record 1 field} │
# => ╰──────────────────┴────────────────────╯
يمكننا تمرير هذا إلى أمر يحصل على محتويات أحد الأعمدة:
open Cargo.toml | get package
# => ╭───────────────┬────────────────────────────────────╮
# => │ authors │ [list 1 item] │
# => │ default-run │ nu │
# => │ description │ A new type of shell │
# => │ documentation │ https://www.nushell.sh/book/ │
# => │ edition │ 2018 │
# => │ exclude │ [list 1 item] │
# => │ homepage │ https://www.nushell.sh │
# => │ license │ MIT │
# => │ metadata │ {record 1 field} │
# => │ name │ nu │
# => │ repository │ https://github.com/nushell/nushell │
# => │ rust-version │ 1.60 │
# => │ version │ 0.72.0 │
# => ╰───────────────┴────────────────────────────────────╯
وإذا لزم الأمر يمكننا التعمق أكثر:
open Cargo.toml | get package.version
# => 0.72.0
Plugins
يدعم Nu الإضافات (plugins) التي تقدم وظائف إضافية للصدفة وتتبع نفس نموذج البيانات المنظمة الذي تستخدمه الأوامر المدمجة. هناك بعض الأمثلة في مجلدات crates/nu_plugins_*.
الإضافات هي ملفات ثنائية متوفرة في مسار النظام وتتبع اصطلاح التسمية nu_plugin_*.
تتفاعل هذه الملفات الثنائية مع nu عبر بروتوكول JSON-RPC بسيط حيث يعرّف الأمر عن نفسه ويرسل إعداداته، مما يجعله متاحًا للاستخدام.
إذا كانت الإضافة عامل تصفية (filter)، تتدفق البيانات إليها عنصرًا تلو الآخر، ويمكنها إرسال البيانات مرة أخرى عبر stdin/stdout.
إذا كانت الإضافة مصرفًا (sink)، تُعطى المتجه الكامل للبيانات النهائية وتُمنح حرية كاملة في استخدام stdin/stdout كما يحلو لها.
يسرد مستودع awesome-nu مجموعة متنوعة من إضافات nu بينما يعرض مستودع showcase منشورات مدونات إعلامية كُتبت عن Nushell بالإضافة إلى فيديوهات تسلط الضوء على مواضيع تقنية تم تقديمها.
Goals
يلتزم Nu بشكل وثيق بمجموعة من الأهداف التي تشكل فلسفته التصميمية. عند إضافة ميزات جديدة، يتم التحقق منها مقابل هذه الأهداف.
-
أولاً وقبل كل شيء، Nu متعدد المنصات. يجب أن تعمل الأوامر والتقنيات عبر المنصات المختلفة ويمتلك Nu دعمًا من الدرجة الأولى لنظامي Windows وmacOS وLinux.
-
يضمن Nu التوافق مع الملفات التنفيذية الحالية الخاصة بالمنصات.
-
يجب أن تتمتع سير عمل Nu وأدواته بقابلية الاستخدام المتوقعة من البرامج الحديثة في عام 2022 (وما بعده).
-
ينظر Nu إلى البيانات على أنها إما منظمة أو غير منظمة. إنها صدفة منظمة مثل PowerShell.
-
أخيرًا، ينظر Nu إلى البيانات بشكل وظيفي. بدلاً من استخدام التحوير (mutation)، تعمل خطوط الأنابيب كوسيلة لتحميل البيانات وتغييرها وحفظها دون حالة قابلة للتغيير.
Officially Supported By
يرجى تقديم issue أو PR لإضافتك إلى هذه القائمة.
- zoxide
- starship
- oh-my-posh
- Couchbase Shell
- virtualenv
- atuin
- clap
- Dorothy
- Direnv
- x-cmd
- vfox
- Windmill
- Lacy
Contributing
راجع المساهمة للتفاصيل. شكرًا لجميع الأشخاص الذين ساهموا بالفعل!
License
المشروع متاح بموجب رخصة MIT. راجع ملف LICENSE لمزيد من المعلومات.