Instalei o RubyInstaller no Windows e estou executando o IMAP Sync, mas preciso usá-lo para sincronizar centenas de contas. Se eu pudesse passar essas variáveis para ele via linha de comando, poderia automatizar melhor todo o processo.
# Source server connection info.
SOURCE_NAME = '[email protected]'
SOURCE_HOST = 'mail.example.com'
SOURCE_PORT = 143
SOURCE_SSL = false
SOURCE_USER = 'username'
SOURCE_PASS = 'password'
# Destination server connection info.
DEST_NAME = '[email protected]'
DEST_HOST = 'imap.gmail.com'
DEST_PORT = 993
DEST_SSL = true
DEST_USER = '[email protected]'
DEST_PASS = 'password'
ruby
command-line
O Flash
fonte
fonte
Respostas:
Algo assim:
então
ou
fonte
#!/usr/bin/env ruby
no topo do.rb
arquivo para poder executá-lo assim:./test.rb
Não reinvente a roda; confira o jeito legal de Ruby biblioteca OptionParser .
Oferece análise de sinalizadores / comutadores, parâmetros com valores opcionais ou necessários, pode analisar listas de parâmetros em uma única opção e pode gerar sua ajuda para você.
Além disso, se alguma das suas informações passadas for bastante estática, isso não muda entre as execuções, coloque-a em um arquivo YAML que é analisado. Dessa forma, você pode ter coisas que mudam toda vez na linha de comando e coisas que mudam ocasionalmente configuradas fora do seu código. Essa separação de dados e código é boa para manutenção.
Aqui estão alguns exemplos para brincar:
Este é um arquivo YAML de amostra se seus destinos forem bastante estáticos:
Isso permitirá que você gere facilmente um arquivo YAML:
fonte
ARGV
contenha apenas os operandos, se houver (ou seja, os argumentos restantes NÃO de opção).Infelizmente, Ruby não suporta mecanismos de passagem como, por exemplo, AWK:
Isso significa que você não pode passar valores nomeados diretamente para o seu script.
O uso das opções de cmd pode ajudar:
Ruby armazena todos os argumentos de cmd na
ARGV
matriz, o próprio nome do script pode ser capturado usando o comando$PROGRAM_NAME
variávelA desvantagem óbvia é que você depende da ordem dos valores.
Se você precisar apenas de comutadores booleanos, use a opção
-s
do interpretador Ruby:Observe a
--
opção, caso contrário, Ruby reclamará de uma opção inexistente-agreed
; portanto, passe-a como uma opção para sua invocação de cmd. Você não precisa disso no seguinte caso:A desvantagem é que você mexe com variáveis globais e possui apenas valores lógicos verdadeiros / falsos.
Você pode acessar valores de variáveis de ambiente:
As desvantagens estão presentes aqui, você deve definir todas as variáveis antes da chamada do script (apenas para o processo ruby) ou exportá-las (shells como BASH):
Neste último caso, seus dados serão legíveis para todos na mesma sessão de shell e para todos os subprocessos, o que pode ser uma séria implicação de segurança.
E pelo menos você pode implementar um analisador de opções usando getoptlong e optparse .
Feliz hacking!
fonte
Você também pode experimentar
cliqr
. É muito novo e em desenvolvimento ativo. Mas existem versões estáveis prontas para serem usadas. Aqui está o repositório git: https://github.com/anshulverma/cliqrExamine a pasta de exemplo para ter uma idéia de como ela pode ser usada.
fonte
Execute este código na linha de comandos e insira o valor de N:
fonte
A menos que seja o caso mais trivial, existe apenas uma maneira sensata de usar as opções de linha de comando no Ruby. É chamado docopt e documentado aqui .
O que é surpreendente com isso, é a simplicidade. Tudo o que você precisa fazer é especificar o texto "ajuda" do seu comando. O que você escreve lá será analisado automaticamente pela biblioteca ruby independente (!).
Do exemplo :
A saída:
Aproveitar!
fonte
Você deve tentar o console_runner gem. Essa gema torna seu código Ruby puro executável na linha de comando. Tudo que você precisa é adicionar anotações YARD ao seu código:
Em seguida, execute-o no console:
fonte
tl; dr
Sei que isso é antigo, mas o getoptlong não foi mencionado aqui e é provavelmente a melhor maneira de analisar os argumentos da linha de comando hoje.
Analisando Argumentos da Linha de Comandos
Eu recomendo vivamente . É muito fácil de usar e funciona como um encanto. Aqui está um exemplo extraído do link acima
Você pode chamar assim
ruby hello.rb -n 6 --name -- /tmp
O OP está tentando fazer
Nesse caso, acho que a melhor opção é usar arquivos YAML, conforme sugerido nesta resposta
fonte