#!/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
argv0o 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
cmdlinenos 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,cmdlinereporta el uso de-hcomo un error pasándo como mensaje el texto de ayuda auto generado. Por esa razón, para poder utilizar la opción-hen necesario incluir el procesado de los parámetros en un bloquetry { ...} 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 $argves un array de cadenas de caracteres (lo normal en TCL)- El nombre del script se almacena en
$argv0si bien su modificación no tiene ningún efecto. - El paquete
cmdlinepuede ser utilizado para procesar lla línea de comandos de forma sencilla, pero solo soporta opciones cortas.
■
