На жаль, Ruby не підтримує такий механізм проходження, як, наприклад, AWK:
> awk -v a=1 'BEGIN {print a}'
> 1
Це означає, що ви не можете передавати названі значення безпосередньо у свій сценарій.
Використання параметрів cmd може допомогти:
> 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
Ruby зберігає всі аргументи cmd у ARGV
масиві, саме ім'я сценарію можна захопити за допомогою $PROGRAM_NAME
змінної.
Очевидним недоліком є те, що ти залежить від порядку значень.
Якщо вам потрібні лише булеві комутатори, скористайтеся опцією -s
інтерпретатора Ruby:
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
Зверніть увагу на --
перемикач, інакше Ruby поскаржиться на неіснуючий варіант -agreed
, тому передайте його як перемикач на ваш cmd виклик. Він вам не потрібен у наступному випадку:
> ruby -s script_with_switches.rb -agreed
> So do I!
Недоліком є те, що ти возишся із глобальними змінними та маєш лише логічні значення true / false.
Ви можете отримати доступ до значень із змінних середовища:
> 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 .
Щасливий злом!