Tengo algunas tareas simples de scripting de shell que quiero hacer
Por ejemplo: Seleccionar un archivo en el directorio de trabajo de una lista de los archivos que coinciden con alguna expresión regular.
Sé que puedo hacer este tipo de cosas usando bash y grep estándar, pero sería bueno poder hackear scripts rápidos que funcionarán en Windows y Linux sin tener que memorizar un montón de programas de línea de comandos y banderas, etc.
Traté de poner esto en marcha pero terminé confundiéndome sobre dónde debería estar obteniendo información, como una referencia al directorio actual
Entonces, la pregunta es qué partes de las bibliotecas Ruby necesito saber para escribir scripts de shell Ruby.
Respuestas:
Por defecto, ya tienes acceso a Dir y File , que son bastante útiles por sí mismos.
También útil desde stdlib es FileUtils
Lo cual es bastante lindo
fuente
Como los otros ya han dicho, su primera línea debería ser
Y también tienes que hacerlo ejecutable: (en el shell)
Luego sigue el código ruby. Si abres un archivo
el archivo se abre en el directorio actual que obtendría
pwd
en el shell.El camino a su script también es fácil de obtener. Con
$0
usted obtiene el primer argumento del shell, que es la ruta relativa a su script. La ruta absoluta se puede determinar así:Para las operaciones del sistema de archivos, casi siempre uso Pathname. Este es un contenedor para muchas de las otras clases relacionadas con el sistema de archivos. También útil: Dir, Archivo ...
fuente
Aquí hay algo importante que falta en las otras respuestas: los parámetros de la línea de comandos están expuestos a su script de shell Ruby a través de la matriz ARGV (global).
Entonces, si tenía un script llamado my_shell_script:
... hazlo ejecutable (como otros han mencionado):
Y llámalo así:
Obtendrías esto:
Los argumentos funcionan bien con la expansión de nombre de archivo:
La mayor parte de esto solo funciona en UNIX (Linux, Mac OS X), pero puede hacer cosas similares (aunque menos convenientes) en Windows.
fuente
Hay muchos buenos consejos aquí, así que quería agregar un poquito más.
Los backticks (o back-ticks) le permiten hacer algunas secuencias de comandos mucho más fácilmente. Considerar
Si tiene problemas para obtener la salida de los backticks, el material se equivocará en lugar de salir de forma estándar. Usa este consejo
Los backticks hacen interpolación de cadenas:
También puedes canalizar dentro de Ruby . Es un enlace a mi blog, pero está vinculado aquí, así que está bien :) Probablemente hay cosas más avanzadas sobre este tema.
Como otras personas notaron, si quieres ponerte serio hay Rush: no solo como un reemplazo de shell (que es un poco estrafalario para mí) sino también como una biblioteca para tu uso en scripts y programas de shell.
En Mac, use Applescript dentro de Ruby para obtener más potencia. Aquí está mi
shell_here
guión:fuente
Ve a buscar una copia de Everyday Scripting with Ruby . Tiene muchos consejos útiles sobre cómo hacer los tipos de cosas que desea hacer.
fuente
Esto también podría ser útil: http://rush.heroku.com/
No lo he usado mucho, pero se ve muy bien
Desde el sitio:
fuente
Digamos que escribes tu
script.rb
guión. poner:como la primera línea y hacer un
chmod +x script.rb
fuente
Cuando desee escribir scripts ruby más complejos, estas herramientas pueden ayudar:
Por ejemplo:
thor (un marco de secuencias de comandos)
gli (git como interfaz)
metadona (para crear herramientas simples)
Le dan un comienzo rápido para escribir sus propios scripts, especialmente 'aplicación de línea de comandos'.
fuente
Las respuestas anteriores son interesantes y muy útiles cuando se utiliza Ruby como script de shell. Para mí, no uso Ruby como mi idioma diario y prefiero usar Ruby solo como control de flujo y todavía uso bash para hacer las tareas.
Se puede utilizar alguna función auxiliar para probar el resultado de ejecución
Con Helper, el script ruby podría ser igual de bash:
fuente
"Cómo escribir rubí" está un poco más allá del alcance de SO.
Pero para convertir estos scripts de ruby en scripts ejecutables, ponga esto como la primera línea de su script de ruby:
Luego haga que el archivo sea ejecutable:
y te vas.
fuente
Coloque esto al comienzo de su script.rb
Luego márquelo como ejecutable:
fuente
La respuesta de webmat es perfecta. Solo quiero señalarle una adición. Si tiene que lidiar mucho con los parámetros de la línea de comandos para sus scripts, debe usar optparse . Es simple y te ayuda enormemente.
fuente
En ruby, la constante
__FILE__
siempre te dará la ruta del script que estás ejecutando.En Linux,
/usr/bin/env
es tu amigo:En Windows depende de si los archivos .rb están o no asociados con ruby. Si ellos estan:
Si no lo están, debe invocar explícitamente ruby en ellos, utilizo un archivo intermedio .cmd:
my_script.cmd:
my_script.rb:
fuente