هل من الممكن ربط الوسائط بسطر الأوامر باستخدام علامات الاقتباس الخلفية؟

StackOverflow https://stackoverflow.com/questions/41630

سؤال

أرغب في تنفيذ أمر نظام التشغيل من برنامج Ruby النصي الخاص بي ولكني أريد إضافة وسيطة من متغير Ruby.

أعلم أن هذا ممكن باستخدام الكلمة الرئيسية نظام مثل هذا :

#!/usr/bin/env ruby
directory = '/home/paulgreg/'
system 'ls ' + directory

ولكن هل هذا ممكن باستخدام "بناء جملة علامات الاقتباس الخلفية أو علامات التبويب الخلفية"؟(أعني باستخدام بناء الجملة هذا: ls)

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

المحلول

لا، سيؤدي ذلك فقط إلى تسلسل الإخراج من ls ومحتويات directory.

ولكن يمكنك القيام بذلك:

#!/usr/bin/env ruby
directory = '/home/paulgreg/'
`ls #{directory}`

نصائح أخرى

`ls #{directory}` 

ليست آمنة جدًا لأنك ستواجه مشكلات مع أسماء المسارات التي تحتوي على مسافات.

من الآمن القيام بشيء مثل هذا:

directory = '/home/paulgreg/'

args = []
args << "/bin/ls"
args << directory

system(*args)

نيك على حق، لكن ليست هناك حاجة لتجميع الحجج بشكل مجزأ:

directory = '/Volumes/Omg a space/'
system('/bin/ls', directory)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top