2016-12-22 6 views
-3

Я пытаюсь передать динамические значения в командной строке для рубинового скрипта.Передача динамических значений в командной строке

ruby file_name.rb '2016-10-11' '2016-10-12' 

2 параметра даты должны быть переданы динамически, и этот скрипт находится внутри задания cron.

Может ли кто-нибудь помочь мне динамически передавать параметры даты?

+0

Что значит «пройденный динамически»? Они уже переданы динамически. Вам нужно любопытное «сегодня» и «завтра»? – mudasobwa

+0

Да, мне нужна переменная, которая по умолчанию занимает сегодня и вчера – FirstName

+0

Почему вы не получите значения по умолчанию (для 'cron') _inside your ruby ​​script_? Вопрос до сих пор не совсем ясен. Просьба описать прецедент подробно, а также ** поделиться усилиями, которые вы уже положили **. – mudasobwa

ответ

2

Чтобы получить сегодня и вчера даты в оболочке в заданном формате, один использует:

date +%Y-%m-%d 
#⇒ 2016-12-22 
date --date yesterday +%Y-%m-%d 
#⇒ 2016-12-21 

Чтобы поставить те, к cron:

ruby file_name.rb `date --date yesterday +%Y-%m-%d` `date +%Y-%m-%d` 

Обратите внимание на обратные кавычки. Можно проверить фактическую команда должна быть выполнена:

echo "ruby file_name.rb `date --date yesterday +%Y-%m-%d` `date +%Y-%m-%d`" 
#⇒ ruby file_name.rb 2016-12-21 2016-12-22 
1

Вы можете установить даты по умолчанию в вашем сценарии Ruby, когда ни один параметр не задан:

require 'date' 

def get_date(date, default_date = Date.today) 
    if date 
    Date.parse(date) 
    else 
    default_date 
    end 
end 

date1 = get_date(ARGV.shift, Date.today - 1) # defaults to yesterday 
date2 = get_date(ARGV.shift, Date.today)  # defaults to today 

puts date1 
puts date2 

Таким образом, вы можете перенести логику из хрон/bash to ruby, но при необходимости могут переопределять параметры:

ruby file_name.rb 
# 2016-12-21 
# 2016-12-22 

ruby file_name.rb '2016-10-11' 
# 2016-10-11 
# 2016-12-22 

ruby file_name.rb '2016-10-11' '2016-10-12' 
# 2016-10-11 
# 2016-10-12