سي شل

صدفة لغة سي ( csh أو النسخة المحسّنة tcsh ) هي صدفة يونكس أنشأها بيل جوي أثناء دراسته العليا في جامعة كاليفورنيا، بيركلي، في أواخر سبعينيات القرن العشرين. وقد انتشرت على نطاق واسع، بدءًا من إصدار 2BSD من توزيعة برمجيات بيركلي (BSD) التي وزّعها جوي لأول مرة عام 1978. [ 1 ] [ 2 ] ومن بين المساهمين الأوائل الآخرين في الأفكار أو الشفرة البرمجية: مايكل أوبيل، وإريك ألمان ، ومايك أوبراين، وجيم كولب. [ 3 ]
تُعدّ واجهة سطر الأوامر C معالج أوامر يُشغّل عادةً في نافذة نصية، مما يسمح للمستخدم بكتابة الأوامر وتنفيذها. كما يمكنها قراءة الأوامر من ملف يُسمى نصًا برمجيًا . ومثل جميع واجهات سطر الأوامر في أنظمة يونكس، تدعم واجهة سطر الأوامر C استخدام الأحرف البديلة في أسماء الملفات ، والتوجيه ، والمستندات المضمنة ، واستبدال الأوامر ، والمتغيرات ، وهياكل التحكم لاختبار الشروط والتكرار . ما ميّز واجهة سطر الأوامر C عن غيرها، خاصةً في ثمانينيات القرن الماضي، هو ميزاتها التفاعلية وأسلوبها العام. فقد سهّلت ميزاتها الجديدة استخدامها وجعلتها أسرع. كما أن أسلوب اللغة العام كان أقرب إلى لغة C ، ما جعلها أكثر وضوحًا وسهولة في القراءة.
في العديد من الأنظمة، مثل macOS و Red Hat Linux ، يُعرف csh في الواقع باسم tcsh ، وهو نسخة محسّنة من csh. غالبًا ما يكون أحد الملفين رابطًا ثابتًا أو رابطًا رمزيًا للآخر، بحيث يشير كلا الاسمين إلى نفس النسخة المحسّنة من C shell. src/bin/csh/يُعدّ كل من كود المصدر الأصلي لـ csh، الموجود في و و جزءًا من NetBSD و OpenBSD .
في نظام دبيان وبعض مشتقاته (بما في ذلك أوبونتو )، توجد حزمتان مختلفتان: csh و tcsh. تعتمد الأولى على نسخة BSD الأصلية من csh [ 4 ] [ 5 ] ، بينما الثانية هي نسخة محسّنة من tcsh. [ 6 ] [ 7 ]
أضافت tcsh ميزات إكمال أسماء الملفات والأوامر، بالإضافة إلى تحرير سطر الأوامر، وهي ميزات مُستعارة من نظام Tenex ، الذي يُعد مصدر حرف "t". [ 8 ] ولأنها أضافت وظائف جديدة فقط دون تغيير ما هو موجود بالفعل، حافظت tcsh على توافقها مع الإصدارات السابقة [ 9 ] من C shell الأصلي. ورغم أنها بدأت كفرع جانبي من شجرة المصدر الأصلية التي أنشأها Joy، إلا أن tcsh أصبحت الآن الفرع الرئيسي للتطوير المستمر. تتميز tcsh باستقرارها العالي، ولكن لا تزال الإصدارات الجديدة تصدر مرة واحدة سنويًا تقريبًا، وتتألف في الغالب من إصلاحات طفيفة للأخطاء. [ 10 ]
أهداف التصميم وميزاته
كانت الأهداف الرئيسية لتصميم واجهة سطر الأوامر C هي أن تبدو أشبه بلغة البرمجة C وأن تكون أفضل للاستخدام التفاعلي.
أقرب إلى ج
كان نظام يونكس مكتوبًا بلغة سي بشكل شبه حصري، لذا كان الهدف الأول من تطوير واجهة أوامر سي هو توفير لغة أوامر أكثر اتساقًا من الناحية الأسلوبية مع بقية النظام. وقد تأثرت الكلمات المفتاحية، واستخدام الأقواس، وقواعد التعبير المدمجة في واجهة أوامر سي، ودعم المصفوفات، بشكل كبير بلغة سي.
بمعايير اليوم، قد لا تبدو لغة C shell أقرب إلى لغة C من العديد من لغات البرمجة النصية الشائعة الأخرى. ولكن خلال ثمانينيات وتسعينيات القرن الماضي، كان الفرق واضحًا، لا سيما عند مقارنتها بلغة Bourne shell (المعروفة أيضًا باسم sh )، وهي لغة الصدفة السائدة آنذاك التي كتبها ستيفن بورن في مختبرات بيل . يوضح هذا المثال عوامل التعبير وبنية لغة C shell الأكثر تقليدية .
#!/bin/sh if [ $days -gt 365 ] then echo This is over a year. fiسي شل
#!/bin/csh if ( $days > 365 ) then echo This is over a year. endifكانت لغة Bourne sh تفتقر إلى قواعد التعبير . وكان لا بد من تقييم الشرط الموجود بين قوسين مربعين باستخدام طريقة أبطأ تتمثل في تشغيل برنامج الاختبار الخارجي . يأخذ أمر sh ifوسيطاته كأمر جديد ليتم تشغيله كعملية فرعية . إذا خرجت العملية الفرعية برمز إرجاع صفر ، فإن sh تبحث عن thenعبارة (عبارة منفصلة، ولكنها غالبًا ما تُكتب متصلة على نفس السطر بفاصلة منقوطة) وتُشغل تلك الكتلة المتداخلة. وإلا، فإنها تُشغل عبارة else. أعطى الربط الصلب لبرنامج الاختبار باستخدام كل من " test" و " [" ميزة الترميز للأقواس المربعة ومظهرًا بأن وظيفة الاختبار جزء من لغة sh. كان استخدام sh للكلمة المفتاحية المعكوسة لتمييز نهاية كتلة التحكم أسلوبًا مستعارًا من ALGOL 68. [ 11 ]
على النقيض من ذلك، استطاعت لغة csh تقييم التعبير مباشرةً، مما جعلها أسرع. كما تميزت بسهولة قراءة أفضل: فقد استخدمت تعبيراتها قواعد نحوية ومجموعة من المعاملات مُستنسخة في الغالب من لغة C، ولم يتم عكس أي من كلماتها الرئيسية، وكان أسلوبها العام أقرب إلى لغة C.
إليكم مثالاً ثانياً، يقارن بين البرامج النصية التي تحسب أول 10 قوى للعدد 2.
#!/bin/sh i = 2 j = 1 while [ $j -le 10 ] do echo '2 **' $j = $i i = ` expr $i '*' 2 ` j = ` expr $j + 1 ` done #!/bin/csh set i = 2 set j = 1 while ( $j < = 10 ) echo '2 **' $j = $i @ i * = 2 @ j++ نهايةومرة أخرى، بسبب عدم وجود قواعد تعبيرية، يستخدم برنامج sh استبدال الأوامر والأمر expr . ( يحتوي نظام POSIX shell الحديث على مثل هذه القواعد: يمكن كتابة العبارة على النحو التالي: أو .)i=$((i * 2)): "$((i *= 2))"
وأخيرًا، إليكم مثال ثالث يوضح الأساليب المختلفة لعبارة التبديل .
#!/bin/sh for i in d* do case $i in d? ) echo $i is short ;; * ) echo $i is long ;; esac done#!/bin/csh foreach i ( d* ) switch ( $i ) case d?: echo $i is short breaksw default : echo $i is long endsw endفي shالبرنامج النصي، ;;تشير علامة " " إلى نهاية كل حالة لأن sh لا يسمح بالعبارات الفارغة بخلاف ذلك.
تحسينات للاستخدام التفاعلي
كان الهدف الثاني هو تحسين واجهة سطر الأوامر C للاستخدام التفاعلي. وقد أُضيفت إليها العديد من الميزات الجديدة التي جعلت استخدامها أسهل وأسرع وأكثر ملاءمةً لكتابة الأوامر في الطرفية. أصبح بإمكان المستخدمين إنجاز المهام بعدد أقل بكثير من ضغطات المفاتيح، كما أصبحت الواجهة تعمل بسرعة أكبر. ومن أبرز هذه الميزات الجديدة: سجل الأوامر وآليات التحرير، والأسماء المستعارة، ومكدسات الدليل، ورمز التلدة، وcdpath، والتحكم في المهام، وتجزئة المسار. وقد لاقت هذه الميزات الجديدة رواجًا كبيرًا، وتم نسخ العديد منها لاحقًا في واجهات سطر أوامر يونكس الأخرى.
تاريخ
يُمكّن سجل الأوامر المستخدمين من استرجاع الأوامر السابقة وإعادة تنفيذها ببضع ضغطات سريعة على لوحة المفاتيح. على سبيل المثال، كتابة علامتي تعجب (" !!") [ 12 ] كأمر يؤدي إلى تنفيذ الأمر السابق مباشرةً. كما !$تسمح مجموعات أخرى من ضغطات المفاتيح القصيرة، مثل " " (بمعنى "الوسيط الأخير للأمر السابق")، بلصق أجزاء من الأوامر السابقة وتعديلها لتكوين أمر جديد.
مشغلو التحرير
لا يقتصر التحرير على نص الأمر السابق فحسب، بل يشمل أيضًا استبدال المتغيرات. وتتراوح عوامل التشغيل من البحث والاستبدال البسيط للسلاسل النصية إلى تحليل مسار الملف لاستخراج جزء محدد.
الأسماء المستعارة
تتيح الأسماء المستعارة للمستخدم كتابة اسم مستعار، ليقوم نظام التشغيل C بتوسيعه داخليًا إلى أي مجموعة من الكلمات التي حددها المستخدم. في العديد من الحالات البسيطة، تعمل الأسماء المستعارة بشكل أسرع وأكثر ملاءمة من البرامج النصية.
مجموعة الدليل
تتيح مكدس الدليل للمستخدم دفع أو سحب دليل العمل الحالي ، مما يسهل التنقل ذهابًا وإيابًا بين أماكن مختلفة في نظام الملفات.
تدوين التلدة
توفر طريقة التلدة طريقة مختصرة لتحديد مسارات الملفات بالنسبة إلى الدليل الرئيسي باستخدام ~الحرف " ".
إكمال أسماء الملفات
The escape key can be used interactively to show possible completions of a filename at the end of the current command line.
Cdpath
Cdpath extends the notion of a search path to the cd (change directory) command: If the specified directory is not in the current directory, csh will try to find it in the cdpath directories.
Job control
Well into the 1980s, most users only had simple character-mode terminals that precluded multiple windows, so they could only work on one task at a time. The C shell's job control allowed the user to suspend the current activity and create a new instance of the C shell, called a job, by typing ^Z. The user could then switch back and forth between jobs using the fg command. The active job was said to be in the foreground. Other jobs were said to be either suspended (stopped) or running in the background.
Path hashing
Path hashing speeds up the C shell's search for executable files. Rather than performing a filesystem call in each path directory, one at a time, until it either finds the file or runs out of possibilities, the C shell consults an internal hash table built by scanning the path directories. That table can usually tell the C shell where to find the file (if it exists) without having to search and can be refreshed with the rehash command.
Overview of the language
The C shell operates one line at a time. Each line is tokenized into a set of words separated by spaces or other characters with special meaning, including parentheses, piping and input/output redirection operators, semicolons, and ampersands.
Basic statements
A basic statement is one that simply runs a command. The first word is taken as name of the command to be run and may be either an internal command, e.g., echo, or an external command. The rest of the words are passed as arguments to the command.
At the basic statement level, here are some of the features of the grammar:
Wildcarding
The C shell, like all Unix shells, treats any command-line argument that contains wildcard characters as a pattern and replaces it with the list of all the filenames that match (see globbing).
*matches any number of characters.?matches any single character.[...]matches any of the characters inside the square brackets. Ranges are allowed, using the hyphen.[^...]matches any character not in the set.
The C shell also introduced several notational conveniences (sometimes known as extended globbing), since copied by other Unix shells.
abc{def,ghi}is alternation (aka brace expansion) and expands to abcdefabcghi.~يعني دليل المستخدم الرئيسي الحالي.~userيعني دليل المستخدم الرئيسي.
يتم دعم الأحرف البديلة المتعددة على مستوى الدليل، على سبيل المثال، " */*.c".
منذ الإصدار 6.17.01، يتم أيضًا دعم استخدام الأحرف البديلة المتكررة في zsh (على سبيل المثال " **/*.c" أو " ") باستخدام الخيار.***/*.htmlglobstar
كان إسناد مسؤولية تفسير الأحرف البديلة إلى الصدفة قرارًا هامًا في أنظمة يونكس. فقد ضمن هذا القرار عمل الأحرف البديلة مع جميع الأوامر، وبنفس الطريقة دائمًا. إلا أن هذا القرار اعتمد على قدرة يونكس على تمرير قوائم الوسائط الطويلة بكفاءة عبر استدعاء النظام exec الذي يستخدمه csh لتنفيذ الأوامر. في المقابل، في أنظمة ويندوز ، يتم تفسير الأحرف البديلة عادةً بواسطة كل تطبيق على حدة. هذا إرث من نظام MS-DOS، الذي كان يسمح فقط بتمرير سطر أوامر بطول 128 بايت إلى التطبيق، مما جعل استخدام الأحرف البديلة عبر موجه أوامر DOS غير عملي. مع أن أنظمة ويندوز الحديثة قادرة على تمرير أسطر أوامر تصل إلى 32 ألف حرف يونيكود تقريبًا ، إلا أن عبء تفسير الأحرف البديلة يبقى على عاتق التطبيق.
إعادة توجيه الإدخال/الإخراج
افتراضيًا، عندما يُشغّل csh أمرًا ما، يرث الأمر مُعرّفات ملفات الإدخال / الإخراج القياسية (stdio ) الخاصة بـ csh ، والتي تُشير عادةً إلى نافذة وحدة التحكم حيث يعمل غلاف C. تسمح عوامل إعادة توجيه الإدخال/الإخراج للأمر باستخدام ملف بدلاً من ذلك للإدخال أو الإخراج .
> fileيعني هذا أن الإخراج القياسي سيُكتب في ملف ، مع استبدال الملف الموجود إن وُجد، وإنشائه إن لم يكن موجودًا. وستظل الأخطاء تظهر في نافذة سطر الأوامر.>& fileيعني ذلك أنه سيتم كتابة كل من stdout و stderr إلى الملف ، واستبداله إذا كان موجودًا، وإنشاؤه إذا لم يكن موجودًا.>> fileيعني ذلك أنه سيتم إلحاق مخرجات النظام القياسية (stdout) في نهاية الملف .>>& fileيعني ذلك أنه سيتم إلحاق كل من stdout و stderr في نهاية الملف .< fileيعني ذلك أنه سيتم قراءة المدخلات القياسية من الملف .<< stringهو مستند مضمّن . سيقرأ الإدخال القياسي الأسطر التالية حتى السطر الذي يطابق السلسلة .
إعادة توجيه الخطأ القياسي (stderr) وحدها غير ممكنة بدون مساعدة غلاف فرعي.
قم بتعيين عامل التصفية إلى "$home" '/filter'، ثم أنشئ قناة "$filter"، ثم اعرض محتويات " $filter" باستخدام الأمر cat ، ثم اعرض محتويات "$filter" باستخدام الأمر ls /root/ أو اطبع " لا يوجد وصول. "، ثم اطبع "$filter" ثم اطبع "لا يوجد وصول. " ، ثم اطبع "/dev/null". قد تستخدم الأنظمة التي تدعم واصفات الملفات كملفات الحل البديل التالي.
( ( ( echo ok ; '' ) > /dev/fd/0 ) >& /dev/null < /dev/fd/1 ) | ( echo "$<" bye )الانضمام
يمكن دمج الأوامر على نفس السطر.
;يعني ذلك تشغيل الأمر الأول ثم الأمر التالي.&&يعني ذلك تشغيل الأمر الأول، وإذا نجح برمز إرجاع 0 ، فقم بتشغيل الأمر التالي.||يعني ذلك تشغيل الأمر الأول، وإذا فشل برمز إرجاع غير صفري، فقم بتشغيل الأمر التالي.
الأنابيب
يمكن ربط الأوامر باستخدام قناة، مما يؤدي إلى تغذية مخرجات أحد الأوامر إلى مدخلات الأمر التالي. ويتم تشغيل كلا الأمرين في وقت واحد .
|يعني ذلك توصيل مخرجات النظام (stdout) بمدخلات النظام (stdin) للأمر التالي. مع ذلك، لا تزال الأخطاء تظهر في نافذة سطر الأوامر.|&يعني ذلك توصيل كل من مخرجات stdout و stderr بمدخلات stdin للأمر التالي.
يعني التشغيل المتزامن "بالتوازي". في نظام متعدد النوى (معالجات متعددة)، قد يتم تنفيذ الأوامر الموجهة حرفيًا في نفس الوقت، وإلا فإن المجدول في نظام التشغيل يقوم بتقسيم الوقت بينها.
عند إدخال أمر، مثلاً " a | b"، يقوم النظام بإنشاء قناة اتصال ، ثم يبدأ تشغيل كل من الأمرَين aمع bإعادة توجيه الإدخال/الإخراج القياسي (stdio) للأمرَين بحيث aيكتب الأمر الأول مخرجاته القياسية (stdout) إلى مدخلات القناة، بينما bيقرأ الأمر الثاني مدخلاته القياسية (stdin) من مخرجات القناة. يُنفّذ نظام التشغيل قنوات الاتصال مع قدر معين من التخزين المؤقت، بحيث aيمكن للأمر الأول الكتابة لفترة قبل امتلاء القناة، ولكن بمجرد امتلاء القناة، ستتوقف أي عملية كتابة جديدة داخل نظام التشغيل حتى bيقرأ الأمر الثاني كمية كافية من البيانات لفتح قنوات الكتابة الجديدة. إذا bحاول الأمر الثالث قراءة بيانات أكثر مما هو متاح، فسيتوقف حتى aيكتب الأمر الثالث بيانات أكثر أو حتى تُغلق القناة، على سبيل المثال، إذا aتم إنهاء الأمر الرابع.
استبدال المتغيرات
إذا احتوت كلمة ما على علامة الدولار، " $"، تُعتبر الأحرف التالية اسمًا لمتغير، ويُستبدل المرجع بقيمة ذلك المتغير. تسمح عوامل التحرير المختلفة، المكتوبة كلاحقات للمرجع، بتحرير مسار الملف (مثل " :e" لاستخراج الامتداد فقط) وإجراء عمليات أخرى.
الاقتباس والهروب
تسمح آليات الاقتباس بأخذ الأحرف الخاصة الأخرى، مثل المسافات البيضاء، والأحرف البديلة، والأقواس، وعلامات الدولار، كنص حرفي .
\يعني ذلك اعتبار الحرف التالي حرفًا عاديًا."تُعتبر السلسلة"علامة اقتباس ضعيفة. تُعامل المسافات البيضاء والأحرف البديلة داخلها كقيم حرفية، ولكن لا تزال عمليات استبدال المتغيرات والأوامر تُجرى.'النص'عبارة عن اقتباس قوي. يُؤخذ النص المحاط بالكامل كنص حرفي.
يجب وضع علامة الهروب (\) قبل علامات الاقتباس المزدوجة داخل بعضها "\"". وينطبق الأمر نفسه على رمز الدولار ($) لمنع توسيع المتغيرات "\$". أما بالنسبة لعلامات الاقتباس المائلة (العلامات المعكوسة)، فيجب استخدام علامات اقتباس مفردة لمنع تداخل استبدال الأوامر "'\`'".
استبدال الأوامر
تتيح خاصية استبدال الأوامر استخدام مخرجات أمر ما كوسيطات لأمر آخر.
`يعني الأمر`أخذ مخرجات الأمر ، وتحليلها إلى كلمات، ولصقها مرة أخرى في سطر الأوامر.
فيما يلي مثال على استبدال الأوامر المتداخلة مع متلازمة عود الأسنان المائل :
echo "`echo " \"\` "echo " \"\\\"\\\`\" "echo " \"\\\"\\\\\\\"\\\\\\\`\\\"\" "echo " \"\\\"\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\`\\\\\\\\\\"\" " صدى " \"\\\"\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\" " pwd" "\\\\"\\\\\\"\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" ... """ " "تنفيذ في الخلفية
عادةً، عندما يبدأ موجه الأوامر C تنفيذ أمر ما، فإنه ينتظر حتى ينتهي الأمر قبل أن يعطي المستخدم مطالبة أخرى تشير إلى أنه يمكن كتابة أمر جديد.
&يعني الأمر بدء تشغيل الأمر في الخلفية والمطالبة فوراً بأمر جديد.
الأغلفة الفرعية
الصدفة الفرعية هي نسخة فرعية منفصلة من الصدفة ترث الحالة الحالية ولكن يمكنها بعد ذلك إجراء تغييرات، على سبيل المثال، على الدليل الحالي، دون التأثير على الأصل.
(تعني الأوامر)تشغيل الأوامر في غلاف فرعي.
هياكل التحكم
توفر بيئة C shell هياكل تحكم لاختبار الشروط والتكرار . هياكل التحكم لاختبار الشروط هي عبارات if و switch. أما هياكل التحكم للتكرار فهي عبارات while و foreach و repeat.
عبارة شرطية
يوجد شكلان لعبارة if . الشكل المختصر يُكتب على سطر واحد ولكنه لا يستطيع تحديد سوى أمر واحد إذا كان التعبير صحيحًا.
شرط ( تعبير ) يستخدم الشكل الطويل الكلمات المفتاحية then و else و endif للسماح بتضمين كتل من الأوامر داخل الشرط.
إذا ( كان التعبير 1 صحيحًا ) فقم بتنفيذ الأوامر ، وإذا ( كان التعبير 2 صحيحًا ) فقم بتنفيذ الأوامر. ... وإلا أوامر نهاية الشرطإذا ظهرت الكلمات المفتاحية else و if على نفس السطر، فإن csh يقوم بتسلسلها بدلاً من تداخلها؛ يتم إنهاء الكتلة بـ endif واحد.
عبارة التبديل
تقارن عبارة التبديل سلسلة نصية بقائمة من الأنماط، والتي قد تحتوي على أحرف بدل. إذا لم يتطابق أي شيء، يتم اتخاذ الإجراء الافتراضي، إن وجد.
switch ( string ) case pattern1: الأوامر نمط حالة breaksw 2: الأوامر فترات راحة ... تقصير : الأوامر ينهي الفواصلبينما بيان
تقوم عبارة while بتقييم تعبير. إذا كان التعبير صحيحًا، يقوم النظام بتنفيذ الأوامر المتداخلة ثم يكرر ذلك طالما بقي التعبير صحيحًا.
بينما ( تعبير ) الأوامر نهايةعبارة foreach
تأخذ عبارة foreach قائمة من القيم، وعادة ما تكون قائمة بأسماء الملفات الناتجة عن استخدام الأحرف البديلة، ثم تقوم for each بتعيين متغير الحلقة إلى تلك القيمة وتشغيل الأوامر المتداخلة.
foreach loop-variable ( list-of-values ) الأوامر نهايةتكرار العبارة
تقوم عبارة التكرار بتكرار أمر واحد عددًا صحيحًا من المرات.
أمر تكرار العدد الصحيحالمتغيرات
تُنفذ واجهة سطر الأوامر C كلاً من متغيرات الصدفة ومتغيرات البيئة . [ 13 ] متغيرات البيئة، التي يتم إنشاؤها باستخدام setenvالعبارة، هي دائمًا سلاسل نصية بسيطة، يتم تمريرها إلى أي عمليات فرعية ، والتي تسترجع هذه المتغيرات عبر envp[]الوسيطة إلى main().
تُعدّ متغيرات الصدفة، التي تُنشأ باستخدام عبارات set`or` @، جزءًا لا يتجزأ من صدفة لغة C. ولا تُمرّر هذه المتغيرات إلى العمليات الفرعية. يمكن أن تكون متغيرات الصدفة إما سلاسل نصية بسيطة أو مصفوفات من السلاسل النصية. بعض متغيرات الصدفة مُعرّفة مسبقًا وتُستخدم للتحكم في خيارات صدفة لغة C الداخلية المختلفة، مثل تحديد ما يجب فعله في حال فشل استخدام حرف بدل في مطابقة أي شيء.
في الإصدارات الحالية من csh، يمكن أن تكون السلاسل ذات طول عشوائي، يصل إلى ملايين الأحرف.
يمكن توسيع المتغيرات حسب الحاجة. ومع ذلك، إذا كان من المرغوب فيه العمل بحجم ثابت، يُفضل استخدام الصيغة التالية.
# يُنشئ متغيرًا كبيرًا بما يكفي لاستيعاب 1024 عنصرًا. set fixed = { , }{ , }{ , }{ , } { , }{ , }{ , }{ , } { , }تعابير الوجه
تُطبّق واجهة سطر الأوامر C قواعد نحوية للتعبيرات العددية الصحيحة 32 بت، مع عوامل مُستعارة من لغة C، بالإضافة إلى بعض العوامل الإضافية لمقارنة السلاسل النصية واختبارات نظام الملفات، مثل اختبار وجود ملف. يجب فصل العوامل عن مُعاملاتها بمسافات بيضاء. يُشار إلى المتغيرات $باسمها .
يُستعار نظام أسبقية المعاملات من لغة C، ولكن بقواعد تجميع مختلفة لحلّ الغموض حول ترتيب المعاملات المتساوية في الأسبقية. في لغة C، يكون التجميع من اليسار إلى اليمين لمعظم المعاملات؛ أما في بيئة C shell، فيكون من اليمين إلى اليسار. على سبيل المثال،
// مجموعات C من اليسار int i = 10 / 5 * 2 ; printf ( "%d \n " , i ); // يطبع 4 i = 7 - 4 + 2 ; printf ( "%d \n " , i ); // يطبع 5 i = 2 >> 1 << 4 ; printf ( "%d \n " , i ); // يطبع 16# مجموعات أوامر C shell من اليمين @ i = 10 / 5 * 2 echo $i # يطبع 1 @ i = 7 - 4 + 2 echo $i # يطبع 1 @ i = ( 2 >> 1 << 4 ) echo $i # يطبع 0تُستخدم الأقواس في مثال C shell لتجنب الخلط بين عوامل إزاحة البتات وعوامل إعادة توجيه الإدخال/الإخراج. في أي من اللغتين، يمكن استخدام الأقواس دائمًا لتحديد ترتيب التقييم المطلوب بشكل صريح، حتى لو كان ذلك لمجرد التوضيح.
تقتصر قيم الإرجاع على 8 بت. بالنسبة exitللتعبيرات، يمكن استخدام عامل النفي الأحادي للتقييم 32 بت.
خروج ! ! 256 # يُرجع 1.استقبال
على الرغم من أن ستيفن بورن نفسه أقر بأن csh كان متفوقًا على shell الخاص به للاستخدام التفاعلي، [ 14 ] إلا أنه لم يكن شائعًا أبدًا في كتابة البرامج النصية.
في عام 1983، كان كل من csh وBourne shell متاحين لنظام التشغيل UNOS التابع لشركة Charles River Data Systems، بالإضافة إلى أدوات UNIX الأخرى بموجب ترخيص من مختبرات Bell . [ 15 ]
في البداية، وخلال ثمانينيات القرن العشرين، لم يكن من الممكن ضمان وجود csh على جميع أنظمة يونكس والأنظمة الشبيهة بها، بينما كان sh متوفرًا، مما جعله خيارًا أفضل لأي برامج نصية قد تحتاج إلى التشغيل على أجهزة أخرى. بحلول منتصف التسعينيات، أصبح csh متاحًا على نطاق واسع، لكن استخدامه في كتابة البرامج النصية واجه انتقادات جديدة من لجنة POSIX [ 16 ] ، التي نصت على ضرورة وجود غلاف واحد مفضل فقط، وهو KornShell ، لأغراض التفاعل وكتابة البرامج النصية. كما واجه غلاف C انتقادات من جهات أخرى [ 17 ] [ 18 ] بسبب عيوب مزعومة في بناء الجملة، ونقص في الميزات، وضعف في التنفيذ.
- عيوب بناء الجملة: كانت عمومًا تناقضات بسيطة ولكنها غير ضرورية في تعريف اللغة. على سبيل المثال، كانت الأوامر `<name>` و`
set< name>` و`<name>` تؤدي جميعها نفس الوظيفة الأساسية، وهي ربط اسم بسلسلة نصية أو مجموعة من الكلمات. ولكن كانت هناك اختلافات طفيفة وغير ضرورية بين الأوامر الثلاثة. كان من الضروري استخدام علامة المساواة مع `<name>` ولكن ليس مع `<name> ` أو ` <name> `؛ وكان من الضروري وضع أقواس حول قائمة الكلمات مع `<name>` ولكن ليس مع `<name>` أو ` <name> `، وهكذا. وبالمثل، تستخدم بنيات التكرار `<name>` و`<name>` و`<name>` كلمات مفتاحية مختلفة بلا داعٍ ( `<name>` و` <name >` و`<name> `) لإنهاء الكتل المتداخلة.setenvaliassetsetenvaliassetsetenvaliasifswitchendifendswend - الميزات المفقودة: من أبرزها عدم القدرة على التعامل مع مؤشرات ملفات الإدخال/الإخراج القياسية بشكل مستقل، وعدم دعم الدوال. ورغم عدم دعم الدوال، تُستخدم الأسماء المستعارة كحل بديل. في حالة كتابة عدة أسطر من التعليمات البرمجية، يجب وضع الأسماء المستعارة بين علامتي اقتباس مفردتين، ويجب أن تسبق نهاية كل سطر شرطة مائلة عكسية (يجب أن تسبق نهاية السطر الأخير علامة اقتباس مفردة لتحديد نهاية الاسم المستعار). يُفضل استخدام الاستدعاء الذاتي بدلاً من الأسماء المستعارة في البرامج النصية كحل بديل للدوال (يُقدم مثال أدناه).
- لقد لاقى تطبيق لغة C shell، الذي استخدم محللاً مخصصاً ، أشد الانتقادات. فبحلول أوائل سبعينيات القرن العشرين، كانت تقنية المترجمات قد بلغت درجة كافية من النضج [ 19 ] بحيث استخدمت معظم تطبيقات اللغات الجديدة إما محللاً من أعلى إلى أسفل أو من أسفل إلى أعلى قادراً على التعرف على قواعد نحوية تكرارية بالكامل . ولا يُعرف سبب اختيار تصميم مخصص بدلاً من ذلك لـ C shell. ربما يكون الأمر ببساطة، كما قال جوي في مقابلة عام 2009: "عندما بدأت العمل على هذا الأمر مع يونكس، لم أكن مبرمجاً جيداً جداً." [ 20 ] كان التصميم المخصص يعني أن لغة C shell لم تكن تكرارية بالكامل، وكان هناك حد لمدى تعقيد الأمر الذي يمكنها معالجته.
نجحت هذه الطريقة مع معظم الأوامر المكتوبة تفاعليًا، ولكن مع الأوامر الأكثر تعقيدًا التي قد يكتبها المستخدم في سكربت، كان من السهل أن تفشل، مُنتجةً رسالة خطأ غامضة أو نتيجة غير مرغوب فيها. على سبيل المثال، لم يكن بإمكان C shell دعم التوجيه بين هياكل التحكم. محاولة توجيه مُخرجات أمر ما foreachإلى ملف آخر grepلم تنجح ببساطة. (الحل البديل، الذي يُناسب العديد من المشاكل المتعلقة بالمحلل، هو تقسيم الكود إلى سكربتات منفصلة. إذا foreachنُقل الأمر إلى سكربت منفصل، سيعمل التوجيه لأن السكربتات تُشغّل عن طريق إنشاء نسخة جديدة من csh ترث مُعاملات الإدخال/الإخراج القياسية الصحيحة. من الممكن أيضًا تقسيم الأكواد في ملف واحد. يُقدّم المثال أدناه حول كيفية تقسيم الأكواد في ملف واحد.)
مثال آخر هو السلوك غير المرغوب فيه في الأجزاء التالية. يبدو أن كلا الجزأين يعنيان: "إذا لم يكن الملف 'myfile' موجودًا، فأنشئه بكتابة 'mytext' فيه". لكن الإصدار الموجود على اليمين يُنشئ دائمًا ملفًا فارغًا لأن ترتيب التقييم في موجه أوامر C هو البحث عن عوامل إعادة توجيه الإدخال/الإخراج وتقييمها في كل سطر أوامر أثناء قراءته، قبل فحص بقية السطر لمعرفة ما إذا كان يحتوي على بنية تحكم.
# يعمل كما هو متوقع إذا لم يكن الملف myfile موجودًا ، فسيتم طباعة النص mytext في الملف myfile endif # يُنشئ دائمًا ملفًا فارغًا إذا ( ! -e myfile ) echo mytext > myfile # حل بديل (لـ tcsh فقط) إذا لم يكن الملف myfile موجودًا ، فقم بتنفيذ الأمر التالي : `echo mytext > myfile`# الحل البديل الثاني (لـ csh و tcsh) ( exit ( -e myfile ) && ( ( echo mytext > myfile ) >& /dev/null || echo لا يمكن إنشاء الملف. ) || echo الملف موجود. كما تم انتقاد التنفيذ بسبب رسائل الخطأ السيئة للغاية، على سبيل المثال، "0: لم يتم العثور على الحدث."، والتي لا تقدم أي معلومات مفيدة حول المشكلة.
ومع ذلك، من خلال الممارسة، من الممكن التغلب على أوجه القصور هذه (وبالتالي توجيه المبرمج لاتباع أساليب أفضل وأكثر أمانًا في تنفيذ البرنامج النصي).
يشير الخطأ "0: لم يتم العثور على الحدث" إلى عدم وجود أوامر محفوظة في سجل الأوامر. قد لا يعمل سجل الأوامر بشكل صحيح في البرامج النصية، ولكن وجود مجموعة مسبقة من الأوامر في متغير يُعد حلاً بديلاً.
#!/bin/csh -f set cmdlist = ( 'date # 1' \ 'uname # 2' \ 'tty # 3' \ 'id # 4' ) echo -n 'أدخل رقمًا لتنفيذ أمر من السجل: ' set cmdexec = "$<" ( exit ( ! ( "$cmdexec" > 0 && \ "$cmdexec" < = "$#cmdlist" ) ) ) >& /dev/null if ( "$status" ) then echo 'رقم حدث غير صالح.' foreach cmd ( $cmdlist :q ) echo "$cmd" end exit -1 endif eval "$cmdlist[$cmdexec]"يفضل تعطيل الأكواد عن طريق تكرار البرنامج النصي كحل بديل للوظائف.
#!/bin/csh -f if ( ! "$?main" ) then if ( ! "$?0" ) then echo 'يجب تشغيل هذا البرنامج النصي عن طريق استدعاء ملفه صراحةً.' exit -1 endif alias function 'set argv = ( \!* ) ; source "$main"' set main = "$0" set ret = "`function myfunc`" echo "$ret" exit endifانتقل إلى "$1" ؛ ثم قم بتغيير المؤشر myfunc: دالة myfunc2 echo "دالة." exit myfunc2: echo "وظيفة أخرى." exitتأثير

حققت واجهة سطر الأوامر C نجاحًا باهرًا في تقديم العديد من الابتكارات، بما في ذلك آلية سجل الأوامر ، والأسماء المستعارة ، ورمز التلدة ، والإكمال التفاعلي لأسماء الملفات، وقواعد التعبير المدمجة في الواجهة، وغيرها، والتي تم نسخها لاحقًا بواسطة واجهات سطر أوامر يونكس أخرى. ولكن على عكس واجهة sh ، التي انبثقت عنها العديد من النسخ المطورة بشكل مستقل، بما في ذلك ksh و bash ، لا يُعرف سوى نسختين من csh. (بما أن tcsh مبنية على كود csh الذي كتبه بيل جوي في الأصل، فلا تُعتبر نسخةً منه).
في عام ١٩٨٦، ألّف ألين هولوب كتاب "On Command: Writing a Unix-Like Shell for MS-DOS" [ ٢١ ]، وهو كتاب يصف برنامجًا كتبه يُدعى "SH"، ولكنه في الواقع استنسخ تصميم اللغة وميزات csh، وليس sh. وكانت أقراص مرنة مُرفقة تحتوي على الشفرة المصدرية الكاملة لـ SH ومجموعة أساسية من الأدوات المساعدة الشبيهة بنظام يونكس (cat، cp، grep، إلخ) متوفرة بسعر ٢٥ دولارًا و٣٠ دولارًا على التوالي من الناشر. وكانت هياكل التحكم وقواعد التعبير وآلية سجل الأوامر وغيرها من الميزات في SH الخاص بهولوب مُطابقة لتلك الموجودة في C shell.
في عام ١٩٨٨، بدأت مختبرات هاميلتون بتوزيع هاميلتون سي شيل لنظام التشغيل OS/2 . [ ٢٢ ] وقد تضمنت نسخةً من csh ومجموعةً من الأدوات المساعدة الشبيهة بأدوات يونكس. في عام ١٩٩٢، أُصدرت هاميلتون سي شيل لنظام التشغيل ويندوز NT . [ ٢٣ ] ولا يزال دعم إصدار ويندوز مستمرًا، بينما توقف دعم إصدار OS/2 في عام ٢٠٠٣. [ ٢٣ ] وصف مرجع سريع صدر في أوائل التسعينيات [ ٢٤ ] الهدف بأنه "الامتثال الكامل للغة سي شيل (باستثناء التحكم في العمليات )"، مع إدخال تحسينات على تصميم اللغة ومراعاة الاختلافات بين يونكس والحاسوب الشخصي. وكان أهم هذه التحسينات هو محلل من أعلى إلى أسفل يسمح بتداخل هياكل التحكم أو تمريرها، وهو أمر لم يكن يدعمه سي شيل الأصلي نظرًا لمحلله المخصص. كما أضافت هاميلتون ميزات لغوية جديدة، بما في ذلك الإجراءات المدمجة والإجراءات التي يُعرّفها المستخدم، والمتغيرات المحلية ذات البنية الكتلية، والحسابات العشرية. تضمنت عملية التكيف مع جهاز الكمبيوتر دعم اسم الملف والاصطلاحات الأخرى على جهاز الكمبيوتر واستخدام الخيوط بدلاً من التفرعات (التي لم تكن متاحة في نظام التشغيل OS/2 أو Windows) لتحقيق التوازي ، على سبيل المثال، في إعداد خط الأنابيب.
في عام 2026، أصدرت شركة Tropibyte برنامج C Shell لنظام التشغيل Windows (cshw)، وهو تطبيق أصلي لـ C Shell يعمل على نظام Win32، ويتم توزيعه دون الحاجة إلى Cygwin أو WSL. ومثل برنامج Hamilton C Shell، يتجنب هذا البرنامج التوازي القائم على التفرع، ويستخدم بدلاً منه الروتينات الفرعية وآليات التزامن الخاصة بنظام Windows. [ 25 ]
انظر أيضاً
مراجع
- ↑ هارلي هان، دليل هارلي هان لنظامي يونكس ولينكس، مؤرشف في 24 أغسطس 2019 في Wayback Machine .
- ↑ ملاحظات مختبر الهندسة في بيركلي، المجلد 1، العدد 2، أكتوبر 2001 مؤرشفة في 9 يوليو 2010 في Wayback Machine .
- ↑ مقدمة إلى C shell مؤرشفة في 13 يوليو 2018 في Wayback Machine بواسطة بيل جوي .
- ↑ أوبونتو - تفاصيل حزمة csh.launchpad.net .
- ↑ دبيان - تفاصيل حزمة csh . tracker.debian.org.
- ↑ أوبونتو - تفاصيل حزمة tcsh.launchpad.net .
- ↑ دبيان - تفاصيل حزمة tcsh . tracker.debian.org.
- ↑ كين جرير (3 أكتوبر 1983). "واجهة سطر أوامر C مع التعرف على الأوامر وأسماء الملفات وإكمالها" . مجموعة الأخبار : net.sources . تاريخ الاسترجاع: 29 ديسمبر 2010 .
- ↑ صفحة دليل tcsh(1) . tcsh.
- ↑ إصلاح الملف في tcsh-17 يونيو 2000.
- ↑ ردًا على: إعادة النظر في المتأخرين في النمو، منشور USENET إلى comp.lang.misc بواسطة Piercarlo "Peter" Grandi، قسم علوم الحاسوب، جامعة ويسكونسن أبيريستويث، المملكة المتحدة، 17 ديسمبر 1989.
- ↑ تُنطق "بانغ، بانغ"
- ↑ تروي، دوغلاس (1990). أنظمة يونكس . أساسيات الحوسبة. شركة بنجامين/كومينغ للنشر. ص 25.
- ↑ بورن، ستيفن ر. (أكتوبر 1983). "صدفة يونكس" . بايت . ص 187. تم الاطلاع عليه بتاريخ 28 يونيو 2026 .
- ↑ دليل المطلع على الكون (ملف PDF) . شركة تشارلز ريفر لأنظمة البيانات، 1983. ص 13.
- ↑ معيار IEEE لتكنولوجيا المعلومات، واجهة نظام التشغيل المحمولة (POSIX)، الجزء 2: الصدفة والأدوات المساعدة، المجلد 2. IEEE Std 1003.2-1992، الصفحات 766-767. ISBN 1-55937-255-9.
- ↑ برمجة Csh تعتبر ضارة بقلم توم كريستيانسن
- ↑ أهم عشرة أسباب لعدم استخدام واجهة سطر الأوامر C (بقلم بروس بارنيت)
- ↑ ديفيد غريس (1971). بناء المترجمات للحواسيب الرقمية. جون وايلي وأولاده. ISBN 0-471-32776-X.
- ^ بيل جوي في محادثة مع برنت شلندر، نادي تشرشل، سانتا كلارا، كاليفورنيا، 11 فبراير 2009 .
- ↑ هولوب، ألين (1986-1987). عند الطلب: كتابة واجهة أوامر شبيهة بنظام يونكس لنظام MS-DOS (الطبعة الثانية ). دار نشر إم آند تي، ريدوود سيتي، كاليفورنيا. رقم ISBN 0-934375-29-1.
- ↑ هاميلتون، دوغلاس. "إعلان هاميلتون عن واجهة سطر الأوامر C" (ملف PDF) . مجلة مطوري الأنظمة الشخصية لشركة IBM (صيف 1989): 119-121 . تاريخ الاسترجاع: 11 يوليو 2020 .
- 1 2 هاميلتون، نيكول (5 مارس 2017). "ملاحظات إصدار هاميلتون سي شيل لنظام ويندوز 5.2.g" . مختبرات هاميلتون، ريدموند، واشنطن . تم الاطلاع عليه في 3 أبريل 2018 .
- ↑ مرجع سريع لقشرة هاميلتون سي (ملف PDF) . مختبرات هاميلتون، وايلاند، ماساتشوستس. 1988-1990 . تم الاطلاع عليه بتاريخ 11 يوليو 2020 .
- ↑ "C Shell for Windows" . شركة Tropibyte، مايو 2026. تم الاطلاع عليه بتاريخ 20 مايو 2026 .
للمزيد من القراءة
- أندرسون، غيل؛ بول أندرسون (1986). الدليل الميداني لـ UNIX C Shell . برنتيس هول. ISBN 0-13-937468-X.
- وانغ، بول (1988). مقدمة إلى بيركلي يونكس . شركة وادزورث للنشر. ISBN 0-534-08862-7.
- دوبوا، بول (1995). استخدام csh و tcsh . أورايلي وشركاؤه. ISBN 1-56592-132-1.
- أريك، مارتن ر. (1993). مرجع يونكس سي شل المكتبي . جون وايلي وأولاده. ISBN 0-471-55680-7.
- "مقدمة في برمجة C Shell" . قسم علوم الحاسوب، كلية كانيسيوس. مؤرشف من الأصل بتاريخ 19 أغسطس 2011. تم الاطلاع عليه بتاريخ 23 يونيو 2010 .
روابط خارجية
- مقدمة إلى لغة البرمجة سي (C shell) بقلم ويليام جوي .
- لينكس باختصار: الفصل 8. csh و tcsh .
- شفرة المصدر التاريخية لنظام 2BSD csh بتاريخ 2 فبراير 1980.
- شجرة يونكس ، توزيعات يونكس التاريخية الكاملة.
- تعتبر برمجة Csh ضارة .
- أهم عشرة أسباب لعدم استخدام موجه الأوامر C.
- أنظمة يونكس
- برنامج عام 1978
- برامج مجانية متعددة المنصات
- البرامج التي تستخدم ترخيص BSD
