দুর্ভাগ্যক্রমে, রুবি যেমন পাস করার পদ্ধতিটিকে সমর্থন করে না যেমন এডাব্লুকে:
> awk -v a=1 'BEGIN {print a}'
> 1
এর অর্থ হল আপনি সরাসরি স্ক্রিপ্টে নাম দেওয়া মানগুলি পাস করতে পারবেন না।
সেমিডি বিকল্প ব্যবহার করতে সাহায্য করতে পারে:
> ruby script.rb val_0 val_1 val_2
# script.rb
puts ARGV[0] # => val_0
puts ARGV[1] # => val_1
puts ARGV[2] # => val_2
রুবি ARGV
অ্যারেতে সমস্ত সেমিডি আর্গুমেন্ট সংরক্ষণ করে, স্ক্রিপ্টের নামটি নিজেই $PROGRAM_NAME
ভেরিয়েবল ব্যবহার করে ক্যাপচার করা যায় ।
সুস্পষ্ট অসুবিধাটি হ'ল আপনি মানগুলির ক্রমের উপর নির্ভরশীল।
আপনার যদি কেবল বুলিয়ান সুইচগুলির প্রয়োজন -s
হয় তবে রুবি ইন্টারপ্রেটারের বিকল্পটি ব্যবহার করুন :
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
অনুগ্রহ করে --
স্যুইচটি নোট করুন , অন্যথায় রুবি কোনও অস্তিত্বহীন বিকল্প সম্পর্কে অভিযোগ করবে -agreed
, সুতরাং এটি আপনার সেন্টিমিডে চলার জন্য স্যুইচ হিসাবে পাস করুন। নিম্নলিখিত ক্ষেত্রে আপনার এটির দরকার নেই:
> ruby -s script_with_switches.rb -agreed
> So do I!
অসুবিধাটি হ'ল আপনি বৈশ্বিক ভেরিয়েবলের সাথে জগাখিচুড়ি করছেন এবং কেবলমাত্র যৌক্তিক সত্য / মিথ্যা মান রয়েছে।
আপনি পরিবেশের ভেরিয়েবল থেকে মানগুলি অ্যাক্সেস করতে পারেন:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
ত্রুটিগুলি এখানে উপস্থিত রয়েছে, আপনাকে স্ক্রিপ্ট আহ্বানের আগে সমস্ত ভেরিয়েবলগুলি সেট করতে হবে (কেবল আপনার রুবি প্রসেসের জন্য) বা সেগুলি রফতানি করতে (BASH এর মতো শাঁস):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
পরবর্তী ক্ষেত্রে, আপনার ডেটা একই শেল সেশনের প্রত্যেকের জন্য এবং সমস্ত উপ-প্রক্রিয়াগুলির জন্য পঠনযোগ্য হবে, যা মারাত্মক সুরক্ষা জড়িত হতে পারে।
এবং অন্তত আপনি getoptlong এবং optparse ব্যবহার করে একটি বিকল্প পার্সার প্রয়োগ করতে পারেন ।
শুভ হ্যাকিং!