2012-02-08 19 views
42

Estoy buscando una forma muy directa de obtener la versión del TCL instalado en una máquina desde la línea de comandos. Para la mayoría de los lenguajes de programación, algo similar aObtenga la versión de TCL desde la línea de comandos?

languagename -v 

proporciona la información que deseo. Esto no parece ser una opción para tclsh.

El TCL FAQ Q.B21 sugiere

echo 'puts $tcl_version;exit 0' | tclsh 

pero me pregunto si hay algo más sencillo y multiplataforma? (Sospecho que esto sería un fracaso poderosamente en un sistema operativo de Microsoft.)

-

EDIT: Sólo para enfatizar que estoy buscando algo que se puede ejecutar directamente desde la línea de comandos del sistema operativo . Hay todo tipo de información disponible una vez que inicie tclsh, pero estoy tratando de evitar eso para facilitar el descubrimiento automático.

+5

Si también está buscando el número de versión secundaria, usar 'pone [Info] Patchlevel' en lugar de 'pone $ tcl_version'. Además, no necesita explícitamente 'exit' - Tcl verá el final del script y saldrá por sí mismo. –

+0

Gracias Glenn. Eso es útil para saber –

+1

Sería interesante saber POR QUÉ necesita la información. En ocasiones, en Tcl no necesita la información, porque STUBS puede hacer aceptable cualquier Tcl reciente (<12 años). – schlenk

Respuesta

36

Esto puede sonar demasiado simplista, pero si ha cometido un archivo de secuencia de comandos que contiene los comandos:

puts $tcl_version 

Y luego corrió tclsh sillyscript.tcl, que se ejecutará en todas las plataformas, asumiendo binario está en PATH . Ciertamente no es elegante ni llamativo, ni siquiera ordenado, pero satisface ese requisito AFAIK.

====

Tengo curiosidad, así que probé y sin las comillas:

echo puts $tcl_version;exit 0 | tclsh 

ejecuta bien en mi caja de ventanas ... a lo mejor detección de la plataforma antes de la detección TCL es una opción?

+0

Eso puede terminar siendo la mejor manera de hacerlo. Esperaré para ver si hay otras respuestas, de lo contrario, aceptaré esta. Gracias. –

+1

Diferentes plataformas tienen metacaracteres de shell diferentes, pero usar un archivo de script auxiliar es el más fácil de todos. –

+1

Linuxers, copiar y pegar: echo 'puts $ tcl_version; exit 0' | tclsh –

18

usted puede hacer esto también.

bash-3.2$ tclsh 
% puts $tcl_version 
8.6 
% info patchlevel 
8.6.0 

pero la mejor manera, creo que es a través del eco.

echo 'puts [info patchlevel];exit 0' | tclsh 
echo 'puts $tcl_version;exit 0' | tclsh 

=======

raro cuando he intentado con las cotizaciones que no funcionó para mí. ejecutando Mac OS X

+1

Si no pone $ tcl_version entre comillas simples, el shell bash intentará reemplazar $ tcl_version con el valor de una variable de shell bash llamada tcl_version. Como tcl_version no existe, el reemplazo es una cadena nula, convirtiendo "puts $ tcl_version" en "puts". Las comillas simples en el shell bash son como {} en tcl - detiene la interpolación. – Scooter

+0

Consejo muy valioso para haber agregado la invocación 'info patchlevel'. Esto hace una diferencia, por ejemplo, al instalar 'gcc' ya que tcl es" necesario para ejecutar el banco de pruebas GCC; ver la sección sobre pruebas para obtener detalles. Tcl 8.6 tiene una regresión conocida en el manejo de patrones RE que hace que algunas partes de la suite de pruebas fallen. ...] Este error se ha corregido en 8.6.1 "La versión 8.6 se incluye con Ubuntu 14.04, pero el número de versión menor era difícil de conseguir. – XavierStuvw

+0

Corrección en lo de arriba. La terminología para la notación de versión es _major.minor.patchlevel_. Entonces 'info patchlevel' da la versión al nivel de parche. Me fue incorrecto decir que el número de versión menor era difícil de conseguir. El nivel del parche fue – XavierStuvw

3

Dependiendo de su concha, que podría ser:

tclsh <<< 'puts [info patchlevel]' 
+0

El 'info patchlevel' es en mi opinión superior a' tcl_version', ya que proporciona una etiqueta de versión más completa. – XavierStuvw

Cuestiones relacionadas