Parámetros Línea de Comandos. Lua
SOLUCIONARIO
Parámetros Línea de Comandos. Lua
2025-11-23
Por
Occam's Razor

Línea de Comandos. Parámetros en Lua

#!/usr/bin/lua

print (#arg, " Parameters...")

for i= 1, #arg, 1 do
    print ("Parameter ", i, ": ", arg[i])
end

if #arg ~= 1 then
    print ("Just one Parameter Please")
    os.exit (-1)
end

print ("Hello ", arg[1])

Lua almacena todos los valores, incluido el nombre del programa en un array especial llamada arg. El operador #, que nos devuelve el tamaño de una tabla, nos permite fácilmente obtener el numero de parámetros recibidos.

Como en otros muchos lenguajes, esta tabla es una copia de los valores que representa y por lo tanto no es posible cambiar el nombre del proceso modificando arg[0] como sucede en otros lenguajes.

SOY NOVATO

Para poder modificar el nombre del programa en este caso debemos usar la llamada al sistema prctl y la operación PR_SET_NAME, si bien esto solo cambia el nombre de la hebra que lo llama.

Para poder hacer eso es necesario escribir una extensión C para hacer la llamada al sistema, o utilizar LuaJIT que ofrece por defecto la librería FFI (Foreigner Function Interface) que nos permite hacer la llamada utilizando ese interface.

Lua nos ofrece varias posibilidades para procesar la línea de comandos de forma fácil y sencilla. Como en la mayoría de lenguajes existen soluciones similares al getopts de C, y lua no es una excepción. Por simplicidad utilizaremos la versión alt-getopts que ofrece las mismas funcionalidades que la librería getopts.

La forma más sencilla de instalar esta librería es utilizando luarocks

# apt install luarocks git
# luarocks --tree=local install alt-getopt

Una vez instalado, podremos utilizar este paquete en código como el siguiente:

#!/usr/bin/lua

package.path = package.path .. ';local/share/lua/5.1/?.lua'

local alt_getopt = require("alt_getopt")

opts,args = alt_getopt.get_opts (arg, "hi:o:",{})

if opts.h then
   print ([[
Uso: ejemplo.lua [opciones]

Opciones:
    -h           Muestra esta ayuda
    -i <fichero> Fichero de entrada
    -o <fichero> Fichero de salida
                                ]])
                                os.exit(0)
end
local input_file  = "input.txt"
local output_file = "output.txt"

if opts.i then input_file = opts.i end
if opts.o then out_file   = opts.o end

print ("Entrada: ".. input_file .. " Salida: " .. output_file)

El código es bastante descriptivo. Observad que hemos tenido que añadir al path de paquetes la localización de alt-getopt, el cual instalamos de forma local utilizando luarocks. Una vez importado el paquete, solo tenemos que llamar a get_opts para procesar la línea de comandos. Como en la mayoría de implementaciones de getopt añadir dos puntos : después de un parámetro significa que se espera un parámetro.

La función get_opts devuelve dos parámetros (si, lua pude hacer eso). El primero contiene las opciones que se hayan procesado, y el segundo contiene cualquier parámetro adicional que se pueda pasar tras las opciones indicadas.

¿SABÍAS QUÉ?
El último parámetro nos permite utilizar opciones largas, si cambiamos la llamada a get_opts por algo como esto:

opts,args = alt_getopt.get_opts (arg, "hi:o:",
                         {help = 'h', input = 'i', output = 'o'})

Podremos utilizar tanto las opciones cortas como las largas --help, --input y --output.

Existen otros paquetes para procesar las opciones de la línea de comandos con funcionalidades más completas que alt-getopt, si bien, este es un paquete bastante estándar y utilizado.

RESUMEN

  • Lua recibe los parámetros en una tabla llamada arg
  • El nombre del script se recibe en arg[0] si bien su modificación no tiene ningún efecto
  • El módulo alt-getopt permite procesar los argumentos de la línea de comandos de forma fácil y sencilla.

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)