EDIT: Por favor , por favor , leia os dois requisitos listados no final desta postagem antes de responder. As pessoas continuam postando suas novas joias, bibliotecas e outros enfeites, que claramente não atendem aos requisitos.
Às vezes eu quero hackear de forma muito barata algumas opções de linha de comando em um script simples. Uma maneira divertida de fazer isso, sem lidar com getopts ou parsing ou qualquer coisa assim, é:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Não é bem a sintaxe de opções Unix normal, porque aceitará parâmetros de linha de comando de opções não, como em " myprog -i foo bar -q
", mas posso viver com isso. (Algumas pessoas, como os desenvolvedores do Subversion, preferem isso. Às vezes eu também.)
Uma opção que está apenas presente ou ausente não pode ser implementada de forma muito mais simples do que a anterior. (Uma atribuição, uma chamada de função, um efeito colateral.) Existe uma maneira igualmente simples de lidar com opções que usam um parâmetro, como " -f
nome do arquivo "?
EDITAR:
Um ponto que eu não disse antes, porque não ficou claro para mim até que o autor de Trollop mencionou que a biblioteca cabia "em um arquivo [de 800 linhas]", é que não estou procurando apenas por sintaxe, mas para uma técnica que possui as seguintes características:
Todo o código pode ser incluído no arquivo de script (sem sobrecarregar o próprio script, que pode ter apenas algumas dezenas de linhas), de forma que se possa colocar um único arquivo em um
bin
diretório em qualquer sistema com um Ruby 1.8 padrão . [5-7] instalação e uso. Se você não pode escrever um script Ruby que não tenha instruções de requerimento e onde o código para analisar algumas opções tem menos de uma dúzia de linhas ou mais, você falhou neste requisito.O código é pequeno e simples o suficiente para que se possa lembrar o suficiente para digitar diretamente o código que fará o truque, em vez de cortar e colar de outro lugar. Pense na situação em que você está no console de um servidor com firewall sem acesso à Internet e deseja criar um script rápido para um cliente usar. Eu não sei sobre você, mas (além de falhar no requisito acima) memorizar até mesmo as 45 linhas do microoptparse simplificado não é algo que eu gostaria de fazer.
getoptlong
e optparse
estão na biblioteca ruby padrão, então você NÃO PRECISA copiá-los ao implantar seu script - se o ruby funcionar nessa máquina, então require 'optparse'
ou require 'getoptlong'
funcionará também.