рдЪреЗрддрд╛рд╡рдиреА: рдмрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреА рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрдорддреМрд░ рдкрд░ рдЧреЗрдЯрдСрдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдФрд░ рдореИрдВ
рдбреЙрдХрдЯреЙрдк рдкрд░ рдЧрд▓рддреА рд╕реЗ
рдареЛрдХрд░ рдЦрд╛рдиреЗ рд╕реЗ рдЦреБрд╢ рдерд╛
редрдкреНрд░рд╛рд░рдВрднред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдЖрдЙрдЯрдкреБрдЯ рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
require 'docopt'
рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЙрдЪрд┐рдд рдореВрд▓реНрдп рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
doc =<<EOF Usage:
рдЕрдм рдмрд╕ рдЪрд░ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ:
begin arguments = Docopt::docopt(doc) rescue Docopt::Exit => e puts e.message exit end
рдпрджрд┐ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ
-h рдпрд╛
тАУhelp рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЦреБрдж
рдбреЙрдХреНрд╕ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧреА рдФрд░ рд╕рдмрдХреБрдЫ рд╣реИрд╢ рдореЗрдВ рд░рдЦреЗрдЧреА, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА
рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╕реМрдВрдкрд╛ рд╣реИред
~/myscript add test argument2 --input=local.txt {"add"=>true, "<opt1>"=>"test", "<opt2>"=>"argument2", "--input"=>"local.txt", "--verbose"=>false, "--help"=>false}
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╣реИрд╢ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдорд╛рдирдХ рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╣рд╛рдВ рд╕реЗ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
puts arguments["<opt1>"] puts arguments["--input"]
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдФрд░ рд╕рдЦреНрддреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреЛрд╖реНрдардХреЛрдВ
() рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд░реНрдЧ
[] рд╣реИрдВрдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо
рдЙрдкрдпреЛрдЧ рд▓рд╛рдЗрди рдХреЗ рддрд╣рдд рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдХреЗ рдХрдИ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
: Usage:
рдЖрдк
рд╡рд┐рдХрд▓реНрдк рдХреЗ рддрд╣рдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
: рдкрдВрдХреНрддрд┐:
--input=<something> [default: my.txt]
рдЕрдм
рддрд░реНрдХреЛрдВ [- рдЗрдирдкреБрдЯ] рд╣реИрд╢ рдореЗрдВ рдореВрд▓реНрдп my.txt рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛред
рдкрд░реЗрд╢рд╛рдиреА рд╕реЗ рдмрд╛рд╣рд░ - рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП $ рд╕реНрдЯрдб рдЪреИрдирд▓ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
$stdin.gets.chomp
рдЕрдВрдд
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред