0

我是 Ruby 新手,我正在编写一个执行以下操作的脚本:

  1. 接受命令行参数
  2. 根据指定的参数删除一些目录。

我想要它做什么:

./admin_bin -c
Removing files in /opt/sysnovo/tmp and /opt/sysnovo/data

我有这个工作!但是......它不是以红宝石的方式。

这是我的代码:

#!/usr/bin/env ruby
require 'rubygems'
require 'fileutils'
require 'optparse'


OptionParser.new do |o|
    o.on('-c') { |b| $clear = b }
    o.on('-h') { puts o; exit }
    o.parse!
end

# Two directories we want to specify.
tmp_dir = "/opt/sysnovo/tmp"
data_dir = "/opt/sysnovo/data"

# push this value to a variable so we can evaluate it.
test = $clear

if "#{test}" == "true"
    puts "Removing files in #{tmp_dir} and #{data_dir}"
    FileUtils.rm_rf("#{tmp_dir}/.", secure: true)
    FileUtils.rm_rf("#{data_dir}/.", secure: true)
else
    puts "Not removing files."
end

如您所见,我将 $clear 设置为 #{test} 并基于此进行评估。我知道这是不正确的。这样做的正确方法是什么?稍后我将在此脚本中添加更多参数和功能。

PS我来自bash背景。

4

1 回答 1

0

Option Parser 使用 True/False 类来设置标志。你的测试应该是这样的:

如果你这样做$clear.class=> TrueClass。这是一个布尔值。

#!/usr/bin/env ruby
require 'fileutils'
require 'optparse'


OptionParser.new do |o|
    o.on('-c') { |b| $clear = b }
    o.on('-h') { puts o; exit }
    o.parse!
end

# Two directories we want to specify.
tmp_dir = "/opt/sysnovo/tmp"
data_dir = "/opt/sysnovo/data"

# push this value to a variable so we can evaluate it.

if $clear
    puts "Removing files in #{tmp_dir} and #{data_dir}"
    FileUtils.rm_rf("#{tmp_dir}/.", secure: true)
    FileUtils.rm_rf("#{data_dir}/.", secure: true)
else
    puts "Not removing files."
end

require 'rubygems'如果您使用的是 ruby​​ <1.9,您也只需要这样做。

于 2012-07-24T15:14:13.177 回答