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

#!/usr/bin/tclsh

puts "$argc Parameters\n"

set i 1
foreach arg $argv {
    puts "Parameter $i : $arg"
    incr i
}

if {$argc != 1} {
    puts "Just one parameter please\n";
    exit -1
}

puts "Hello [lindex $argv 0]";

TCL usa el mismo concepto que C, utilizando una variable llamada $argc para indicar el número de parámetros y pasar los valores de los parámetros en una matriz llamada $argv.

TCL no pasa el nombre del script como argumento 0, sin embargo este valor lo podemos encontrar en la variable especial argv0 (sin espacio antes del cero)…

¿SABÍAS QUE?

En TCL no podemos modificar el nombre del proceso simplemente modificando la variable argv0 o cualquier otra técnica simplemente utilizando el lenguaje. Es posible hacer esto haciendo llamadas a código de más bajo nivel escrito en C u otros trucos.

Cuando se trata de procesar líneas de comando complejas, TCL nos ofrece, al igual que otros lenguajes, módulos con los que hacer esto de forma sencilla. Uno de los más fáciles de usar es el paquete estándar cmdline.

Para poder utilizar este paquete es posible que necesites instalar el paquete tcllib. Consulta la documentación de tu distribución para hacerlo.

El siguiente ejemplo muestra como usarlo.

#!/usr/bin/env tclsh

# Usamos el paquete cmdline
package require cmdline
package require try

# Definimos las opciones:
set options {
    {i.arg      "default_input.txt"  "Fichero de entrada"}
    {o.arg      "default_output.txt" "Fichero de salida"}
}

# Procesamos opciones
try {
    array set params [::cmdline::getoptions argv $options]
} trap {CMDLINE USAGE} {msg o} {
    puts $msg
    exit 1
}

# Extraemos los parámetros que hemos pasado si existen
set input_file  $params(i)
set output_file $params(o)

# Los mostramos
puts "Input file : $input_file"
puts "Output file: $output_file"

# Parámetros adicionales se mantienen en $argv y se pueden procesar aquí
if {[llength $argv] > 0} {
    puts "Extra arguments: $argv"
}

El paquete cmdline no soporta por defecto opciones largas, pero lo que si hace es generar un mensaje de ayuda automáticamente. El mensaje se mostrará en caso de que se produzca un error, ya sea por utilizar una opción no válida o la falta de algún parámetro o al utilizar los flags: -h, -? o -help.

SOY NOVATO

cmdline nos informa de los posibles errores lanzando una excepción. Las excepciones por defecto producen un mensaje bastante críptico útil para los programadores pero no para los usuarios. En este caso, cmdline reporta el uso de -h como un error pasándo como mensaje el texto de ayuda auto generado. Por esa razón, para poder utilizar la opción -h en necesario incluir el procesado de los parámetros en un bloque try { ...} trap {...}

Cualquier parámetro adicional a los definidos por las opciones, se dejan en $argv y se pueden utilizar en el programa. El script muestra un ejemplo en el que esos parámetros se imprimen en pantalla. Esto lo necesitamos en casos como en el de programas que pueden leer varios ficheros de entrada, pensad por ejemplo en la utilidad cat o tar.

Resumen

  • Tcl recibe los parámetros en el array $argv
  • $argv es un array de cadenas de caracteres (lo normal en TCL)
  • El nombre del script se almacena en $argv0 si bien su modificación no tiene ningún efecto.
  • El paquete cmdline puede ser utilizado para procesar lla línea de comandos de forma sencilla, pero solo soporta opciones cortas.

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í :)