在命令行

时间:2016-12-22 10:53:26

标签: ruby command-line crontab

我试图在命令行中为ruby脚本传递动态值。

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

需要动态传递2个日期参数,并且此脚本位于cron作业中。

有人可以帮助我动态传递日期参数吗?

2 个答案:

答案 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