Ne yazık ki Ruby, örneğin AWK gibi bir geçiş mekanizmasını desteklemez:
> awk -v a=1 'BEGIN {print a}'
> 1
Bu, adlandırılmış değerleri doğrudan komut dosyanıza geçiremeyeceğiniz anlamına gelir.
Cmd seçeneklerini kullanmak yardımcı olabilir:
> 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 tüm cmd argümanlarını ARGV
dizide saklar , scriptname $PROGRAM_NAME
değişkenini kullanarak yakalanabilir .
Bariz dezavantaj, değerlerin sırasına bağlı olmanızdır.
Yalnızca Boole anahtarlarına ihtiyacınız varsa -s
Ruby yorumlayıcı seçeneğini kullanın :
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
Lütfen --
anahtarı not edin , aksi takdirde Ruby varolmayan bir seçenek hakkında şikayet edecektir -agreed
, bu yüzden cmd çağrınıza bir geçiş olarak geçirin. Aşağıdaki durumda buna ihtiyacınız yoktur:
> ruby -s script_with_switches.rb -agreed
> So do I!
Dezavantajı, global değişkenlerle uğraşmanız ve sadece mantıksal doğru / yanlış değerleriniz olmasıdır.
Ortam değişkenlerinden değerlere erişebilirsiniz:
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
Burada dezavantajlar var, tüm değişkenleri komut dosyası çağrısından önce ayarlamanız (sadece yakut işleminiz için) veya onları dışa aktarmanız (BASH gibi kabuklar):
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
İkinci durumda, verileriniz aynı kabuk oturumundaki herkes ve tüm alt işlemler için okunabilir, bu da ciddi bir güvenlik sonucu olabilir.
Ve en azından getoptlong ve optparse kullanarak bir seçenek ayrıştırıcısı uygulayabilirsiniz .
Mutlu hack!