我最近一直在摆弄Ruby,所以我决定编写一个sftp客户端。
require 'net/sftp'
require 'ostruct'
require 'optparse'
class Sftp
def parse(arguments)
ARGV << "-h" if ARGV.empty?
@options = OpenStruct.new
args = OptionParser.new do |args|
args.banner = "Usage: #{__FILE__} [options]"
args.on("--host HOST", String,
) do |host|
@options.host = host
end
args.on("--username USERNAME", String,
) do |username|
@options.username = username
end
args.on("--password PASSWORD", String,
) do |password|
@options.password = password
end
args.on("--port=PORT", Integer,
) do |port|
@options.port = port
end
args.on("--mkdir=MAKE DIRECTORY", String,
) do |mkdir|
@options.mkdir = mkdir
end
args.on("--rmdir=REMOVE DIRECTORY", String,
) do |rmdir|
@options.rmdir = rmdir
end
args.on("-h", "--help", "Show help and exit") do
puts args
exit
end
end
begin
args.parse!(arguments)
rescue OptionParser::MissingArgument => error
puts "[!] ".red + error.message.bold
exit
rescue OptionParser::InvalidOption => error
puts "[!] ".red + error.message.bold
exit
end
def connect
Net::SFTP.start(@options.host, @options.username, :password => @options.password, :port => @options.port) do |sftp|
sftp.mkdir(@options.mkdir)
puts "Creating Directory: #{@options.mkdir}"
sftp.rmdir(@options.rmdir)
puts "Deleting Directory: #{@options.rmdir}"
end
end
end
def run(arguments)
parse(arguments)
connect
end
end
sftp = Sftp.new
sftp.run(ARGV)
我想把这两个命令分开,例如当我传递参数mkdir时我只想运行这个命令,如果我想再次运行rmdir,我只想运行这个命令。
这和方法有关,但我找不到合适的解决方法。而且我真的很生疏。有什么建议吗?
1条答案
按热度按时间js5cn81o1#
一种非常简单的方法是在运行命令之前检查是否设置了所需的值,如果没有设置该值,则跳过该命令。