【问题标题】:Passing dynamic values in command line在命令行中传递动态值
【发布时间】:2017-05-07 23:31:04
【问题描述】:

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

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

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

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

【问题讨论】:

  • “动态传递”是什么意思?它们已经动态传递。你需要“今天”和“明天”吗?
  • 是的,我需要一个变量,默认情况下需要今天和昨天
  • 为什么不能在 ruby 脚本中获得默认值(为了cron?这个问题仍然很不清楚。请详细描述用例,同时分享你已经付出的努力
  • @FirstName 您需要 2 个日期的 array,例如 dates = ['2016-10-11','2016-10-12'] 或 ?

标签: ruby command-line crontab


【解决方案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

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2012-07-11
      相关资源
      最近更新 更多