التابع exec
الخاص بالصنف Kernel
في روبي
يستبدل التابع exec
العملية (process) الحالية عبر تشغيل الأمر الخارجي المعطى command
(انظر فقرة البنية العامة)، والذي يمكن أن يأخذ أحد الأشكال التالية:
exec(commandline)
|
سطر أوامر نصي والذي يُمرّر إلى الصدفة (shell) القياسية. |
exec(cmdname, arg1, ...)
|
اسم أمر (command name) ووسيط واحد أو أكثر (بدون صدفة). |
exec([cmdname, argv0], arg1, ...)
|
اسم أمر وكائن argv ، مع إمكانية إضافة وسائط أخرى (بدون صدفة shell)
|
في الشكل الأول ، تؤخذ السلسلة النصية باعتبارها سطر أوامر، والذي تقوم الصدفة بتبسيطه (expansion ) قبل أن يتم تنفيذه.
الصدفة القياسية تعني دائمًا "/bin/sh"
على الأنظمة المشابهة ليونكس، مثل ENV["RUBYSHELL"]
(أو ENV["COMSPEC"]
على منصات Windows NT)، وما شابه.
في حال اتبعت السلسلة النصية من الشكل الأول (exec("command")
) هذه القواعد البسيطة:
- لا أحرف مميزة (meta characters)،
- ولا كلمات مخصصة للصدفة أو مدمجة (built-in)
- تستدعي روبي الأمر مباشرة دون صدفة
يمكنك فرض استدعاء الصدفة بإضافة "؛
" إلى السلسلة النصية (لأن "؛
" حرف مميز).
لاحظ أن هذا السلوك يمكن ملاحظته في كون معرف العملية (pid) الذي تم الحصول عليه ( من طرف spawn()
و IO#pid
بالنسبة لـIO.popen
) هو معرف العملية للأمر المستدعى، وليس للصدفة.
في الشكل الثاني (exec("command1", "arg1",...)
) ، يتم اعتبار الوسيط الأول كاسم للأمر، أما البقية فتُمرّر كوسائط للأمر دون أن تبسُطها الصدفة.
في الشكل الثالث (exec(["command", "argv0"],"arg1", ...)
) ، يُبدأ بمصفوفة ثنائية في بداية الأمر، عنصرها الأول هو الأمر الذي سيتم تنفيذه، أما الثاني فيُستخدم كقيمة لـ argv[0]
، والتي قد تظهر في قوائم العملية (process listings).
من أجل تنفيذ الأمر، ستُستخدم إحدى استدعاءات النظام exec(2)
، لذلك فإنّ الأمر الجاري قد يرث بعض خصائص بيئة البرنامج الأصلي (بما في ذلك واصفات الملفات [file descriptors] المفتوحة).
يمكن تعديل هذا السلوك عبر الوسيطين env
و options
. انظر التابع spawn
لمزيد من التفاصيل.
في حال فشل تنفيذ الأمر (عادةً عند عدم التمكن من إيجاد Errno::ENOENT
) يتم إطلاق استثناء SystemCallError
.
بعدّل التابع exec
خصائص العملية وفقا لقيمة الوسيط options
قبل استدعاء النظام exec(2)
. راجع صفحة التابع spawn
لمزيد من التفاصيل حول الوسيط options
المعطى.
قد يُحتفظ بالخصائص المعدلة عند فشل استدعاء النظام exec(2)
. على سبيل المثال، حدود الموارد الثابتة (hard resource limits) غير قابلة للاستعادة. إذا لم يناسلبك هذا، فضع في اعتبارك إنشاء عملية فرعية (child process) باستخدام spawn
أو system
.
البنية العامة
exec([env,] command... [,options])
المعاملات
env
يُستخدم هذا الوسيط لتعديل سلوك التابع exec
.
command...
الأمر الخارجي المعطى.
options
يُستخدم هذا الوسيط لتعديل سلوك التابع exec
.
أمثلة
مثال على استخدام التابع exec
:
exec "echo *" # echoes list of files in current directory
# never get here
exec "echo", "*" # echoes an asterisk
# never get here
انظر أيضا
- التابع
eval
: يقيم (Evaluates) التابع تعبيرات روبي الموجودة في سلاسل نصية. - التابع
spawn
: يعيد التابع أمرًا محددا ويعيد معرّفه.