如何编写命令行工具以通过邮政编码获取天气

这将是一个相对全面的教程,介绍如何编写命令行工具以从提供给命令行工具的邮政编码中打印天气。第一步是在 ruby 中编写程序来执行此操作。让我们从写一个方法 weather(zip_code) 开始(这个方法需要 yahoo_weatherman gem。如果你没有这个 gem 你可以通过从命令行输入 gem install yahoo_weatherman 来安装它)

require 'yahoo_weatherman'

def weather(zip_code)
  client = Weatherman::Client.new
  client.lookup_by_location(zip_code).condition['temp']
end

我们现在有一个非常基本的方法,可以在提供邮政编码时提供天气。现在我们需要将它变成命令行工具。很快我们来看看如何从 shell 和相关变量调用命令行工具。当像 tool argument other_argument 这样的工具被调用时,在 ruby 中有一个变量 ARGV,它是一个等于 ['argument', 'other_argument'] 的数组。现在让我们在我们的应用程序中实现它

#!/usr/bin/ruby
require 'yahoo_weatherman'

def weather(zip_code)
  client = Weatherman::Client.new
  client.lookup_by_location(zip_code).condition['temp']
end 
 
puts weather(ARGV[0])

好! 现在我们有一个可以运行的命令行应用程序。注意文件开头的 she-bang 行(#!/usr/bin/ruby)。这允许文件成为可执行文件。我们可以将此文件保存为 weather。 ( 注意 :不要将其保存为 weather.rb,不需要文件扩展名,并且 she-bang 告诉你需要告诉你这是一个 ruby 文件)。现在我们可以在 shell 中运行这些命令(不要输入 $)。

$ chmod a+x weather
$ ./weather [ZIPCODE]

在测试完成后,我们现在可以通过运行此命令将其与/usr/bin/local/进行 sym-link 连接

$ sudo ln -s weather /usr/local/bin/weather

现在可以在命令行上调用 weather,无论你在哪个目录中。