He instalado RubyInstaller en Windows y estoy ejecutando IMAP Sync pero necesito usarlo para sincronizar cientos de cuentas. Si pudiera pasarle estas variables a través de la línea de comando, podría automatizar mejor todo el proceso.
# 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
El flash
fuente
fuente
Respuestas:
Algo como esto:
luego
o
fuente
#!/usr/bin/env ruby
en la parte superior del.rb
archivo para ser capaz de ejecutar de esta manera:./test.rb
No reinventes la rueda; echa un vistazo a la biblioteca OptionParser de Ruby .
Ofrece el análisis de indicadores / interruptores, parámetros con valores opcionales o requeridos, puede analizar listas de parámetros en una sola opción y puede generar su ayuda para usted.
Además, si alguna de su información que se pasa es bastante estática, eso no cambia entre ejecuciones, póngala en un archivo YAML que se analice. De esa manera, puede tener cosas que cambian cada vez en la línea de comandos, y cosas que cambian ocasionalmente configuradas fuera de su código. Esa separación de datos y código es buena para el mantenimiento.
Aquí hay algunas muestras para jugar:
Este es un archivo YAML de muestra si sus destinos son bastante estáticos:
Esto le permitirá generar fácilmente un archivo YAML:
fuente
ARGV
contiene solo los operandos, si los hay (es decir, los argumentos restantes, que no son de opciones).Desafortunadamente, Ruby no admite mecanismos de paso como, por ejemplo, AWK:
Significa que no puede pasar valores con nombre a su script directamente.
Usar las opciones de cmd puede ayudar:
Ruby almacena todos los argumentos de cmd en la
ARGV
matriz, el nombre del script se puede capturar utilizando la$PROGRAM_NAME
variable.La desventaja obvia es que depende del orden de los valores.
Si solo necesita modificadores booleanos, use la opción
-s
del intérprete Ruby:Tenga en cuenta el
--
cambio, de lo contrario, Ruby se quejará de una opción inexistente-agreed
, así que páselo como un cambio a su invocación de cmd. No lo necesita en el siguiente caso:La desventaja es que se mete con variables globales y solo tiene valores lógicos verdadero / falso.
Puede acceder a valores desde variables de entorno:
Los inconvenientes están presentes aquí, debe configurar todas las variables antes de la invocación del script (solo para su proceso de ruby) o exportarlas (shells como BASH):
En el último caso, sus datos serán legibles para todos en la misma sesión de shell y para todos los subprocesos, lo que puede ser una grave implicación de seguridad.
Y al menos puede implementar un analizador de opciones usando getoptlong y optparse .
¡Feliz pirateo!
fuente
También puedes probar
cliqr
. Es bastante nuevo y en desarrollo activo. Pero hay versiones estables listas para ser utilizadas. Aquí está el repositorio de git: https://github.com/anshulverma/cliqrMire en la carpeta de ejemplo para tener una idea de cómo se puede usar.
fuente
Ejecute este código en la línea de comando e ingrese el valor de N:
fuente
A menos que sea el caso más trivial, solo hay una forma sensata de usar las opciones de línea de comandos en Ruby. Se llama docopt y se documenta aquí .
Lo que es sorprendente es su simplicidad. Todo lo que tiene que hacer es especificar el texto de "ayuda" para su comando. Lo que escriba allí será analizado automáticamente por la biblioteca ruby independiente (!).
Del ejemplo :
La salida:
¡Disfrutar!
fuente
Deberías probar console_runner gem. Esta gema hace que su código Ruby puro sea ejecutable desde la línea de comandos. Todo lo que necesita es agregar anotaciones YARD a su código:
Luego ejecútelo desde la consola:
fuente
tl; dr
Sé que esto es antiguo, pero getoptlong no se mencionó aquí y es probable que hoy sea la mejor manera de analizar los argumentos de la línea de comandos.
Análisis de argumentos de línea de comando
Recomiendo mucho getoptlong . Es bastante fácil de usar y funciona de maravilla. Aquí hay un ejemplo extraído del enlace de arriba
Puedes llamarlo así
ruby hello.rb -n 6 --name -- /tmp
¿Qué está tratando de hacer OP?
En este caso, creo que la mejor opción es usar archivos YAML como se sugiere en esta respuesta
fuente