tcl: Cómo determinar el shell para el comando del módulo

Estoy programando en tcl (para usar con el comando de módulos). Necesito averiguar qué shell está utilizando el usuario. Como nunca antes había programado en tcl, no sé qué está mal con mi código simple. ¿Alguien puede aconsejarme?

set shell [module-info shell]
if { $shell=="bash" } {
    puts "running bash"
}

El error que recibo (lo siento, no lo incluí originalmente) es:

intel64(32):ERROR:102: Tcl command execution failed: if { $shell == "bash" } {
    puts "running bash
}

Tenga en cuenta que intel64 es el archivo donde se encuentra este código y la línea 34 es la última línea.

preguntado el 08 de noviembre de 11 a las 15:11

¿Puede darnos la salida del $shell variable (puts $shell) resp. los module-info shell producción (puts [module-info shell])? -

4 Respuestas

Las comillas simples no tienen un significado especial para Tcl. En Tcl, las comillas dobles son análogas a las comillas dobles de shell y las llaves ({}) son análogos a las comillas simples de shell. Querrías escribir

if { $shell == "bash" } ...

Vea la sintaxis completa de Tcl documentada aquí: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm

Sin embargo, eso no explica el mensaje de error. Tcl en sí no tiene un system mando. No puedo decir cómo este "comando de módulos" extiende Tcl. Tratar

puts "running bash"

o si realmente quieres usar echo, entonces

exec echo running bash

respondido 08 nov., 11:22

gracias por tu sugerencia. He actualizado mi guión y la pregunta original para reflejar las comillas simples frente a las dobles. Desafortunadamente, no ayudó. - jlconlin

Sí, me faltaba una cita cercana. Ahora todo funciona. ¡Gracias! - jlconlin

Comentarios de 2:

  1. utilizado pone para mostrar el valor de $ caparazón, para que pueda ver exactamente lo que está sucediendo.
  2. tu más debe estar en la misma línea que el corchete derecho anterior.
  3. Dices que el valor de $ shell es 'bash'. Si es así, deberá cambiar su if declaración y poner comillas dobles alrededor de ella, por ejemplo "'intento'".

respondido 08 nov., 11:22

Gracias por la actualización, @Brian. En mi otro comentario, no quise decir que el valor de $ shell incluye las comillas simples. Perdón por la confusion. Actualicé mi pregunta original para que sea más simple. - jlconlin

El problema es que tu no debe use put al usar el software de módulos.

módulos es solo un programa tcl que modifica de algun modo su entorno de shell de una manera independiente de shell. Esto se hace a través de un simple truco, verifique su entorno:

set | grep -A 10 module
...
module () 
{ 
    eval `/modules-3.2.9/Modules/$MODULE_VERSION/bin/modulecmd bash $*`
}

Entonces, el truco es crear una cadena adecuada que luego sea evaluada por el shell actual. Esa cadena proviene de stdout, entonces, ¿qué debería haber sucedido después? trabajado es que su shell debería tener quejas sobre intentar evaluar "ejecutar bash"

Me desconcierta por qué se supone que funcionó después de que agregaste la cita que faltaba.

Respondido 17 Abr '13, 18:04

set shell $::env(SHELL)
switch -glob $shell {
  "/bin/tcsh" -
  "/bin/csh" {
  setenv foamDotFile $env(FOAM_INST_DIR)/OpenFOAM-2.3.0/etc/cshrc
  }
  "/bin/ksh" -
  "/bin/bash" {
  setenv foamDotFile $env(FOAM_INST_DIR)/OpenFOAM-2.3.0/etc/bashrc
  }
}

Respondido 02 Jul 14, 19:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.