我试图在命令行中为ruby脚本传递动态值。
ruby file_name.rb '2016-10-11' '2016-10-12'
需要动态传递2个日期参数,并且此脚本位于cron作业中。
有人可以帮助我动态传递日期参数吗?
答案 0 :(得分:2)
要以给定格式获取今天和昨天在shell中的日期,请使用:
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 :(得分: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
这样,您可以将逻辑从cron / bash转移到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