سؤال

لقد كتبت غلاف bash لروبي والذي يمر عبر خطوات الإعداد المختلفة.

النسخة الأساسية هي،

   #!/bin/bash 
   #   ruby_wrapper.sh
   ruby

الآن أريد أن أكون قادرًا على استخدام هذا الغلاف تمامًا مثل الياقوت العادي!على وجه التحديد، أريد إنشاء ملف .rb يستخدم هذا "المترجم".

   #!/path/to/ruby_wrapper.sh
   #  my_file.rb
   puts "hello world"

لذلك أريد أن أكون قادرًا على القيام بذلك $ ./my_file.rb بدلاً من $ ruby_wrapper.sh my_file.rb

هل هذا ممكن؟

ال توثيق يدعي أنه ليس كذلك.

لاحظ أن المترجم قد لا يكون في حد ذاته نصًا برمجيًا للمترجم.

لكنني لا أرى لماذا لا.هل لدى أي شخص أي أفكار للالتفاف حول هذا؟

هل كانت مفيدة؟

المحلول

حاول استدعاء المجمع الخاص بك مع /usr/bin/env.إنها في الواقع ممارسة جيدة لتنفيذ نصوص روبي باستخدامها /usr/bin/env ruby نظرًا لأنك لست مضطرًا إلى ترميز المسار إلى ملف ruby ثنائي، لذلك هذا ليس غير طبيعي.

$ cat ruby_wrapper.sh 
#!/bin/bash
exec ruby "$@"

$ cat wrapped.rb 
#!/usr/bin/env /tmp/ruby_wrapper.sh
puts "hello world"

$ ./wrapped.rb 
hello world

أيضًا كملاحظة جانبية، انظر كيف استخدمتها exec في البرنامج النصي المجمع.سيسمح هذا لمترجم روبي بتولي عملية البرنامج النصي المجمع الخاص بك بدلاً من تشغيله كعملية فرعية للبرنامج النصي الخاص بك.وهذا يجعل الغلاف شفافًا للمتصل (سيتم تسليم الإشارات مباشرة إلى روبي بدلاً من باش، على سبيل المثال).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top