2011-08-24 13 views
6

Estoy intentando llamar un script bash desde un script TCL y necesito obtener el estado de salida desde el script bash o al menos pasar algo al script TCL para que Puedo decir si mi script se ejecutó con éxito. ¿Alguna sugerencia?Llamar a un script bash desde un script tcl y regresar y salir del estado

+0

No es claro si usted está preguntando cómo atrapar un valor de retorno en TCL, o cómo volver a un estado de salida de bash. –

+0

@Simon Hibbs: idealmente me gustaría capturar el estado de salida de mi script bash en tclsh. – tgai

Respuesta

9

Ver http://wiki.tcl.tk/exec - haga clic en el botón "Mostrar discusión" - hay un ejemplo muy detallado de cómo hacer exactamente lo que está pidiendo. Lo que necesita es sin embargo catch

set status [catch {exec script.bash} output] 

if {$status == 0} { 
    puts "script exited normally (exit status 0) and wrote nothing to stderr" 
} elseif {$::errorCode eq "NONE"} { 
    puts "script exited normally (exit status 0) but wrote something to stderr which is in $output" 
} elseif {[lindex $::errorCode 0] eq "CHILDSTATUS"} { 
    puts "script exited with status [lindex $::errorCode end]." 
} else ... 
+1

El enlace definitivo es un ejemplo de la documentación de Tcl 8.6: http://www.tcl.tk/man/tcl8.6/TclCmd/exec.htm#M29 –

+0

nice. los documentos de Tcl 8.5 tienen los mismos ejemplos: http://www.tcl.tk/man/tcl8.5/TclCmd/exec.htm#M28 –

1

Lo que queremos es exec el resultado de los cuales estará en el valor de retorno, se advirtió sin embargo hay un montón de trampas utilizando ejecutivo, sobre todo si lo que necesita hacer ningún complejo citando

+0

Eso es lo que pensé pero no pareció obtener nada cuando intenté obtener el resultado de mi ejecutivo. Intentaría algo como esto: establecer el valor [exec bash script.sh] y el valor no contendría nada independientemente de lo que el estado de las secuencias de comandos fuera? – tgai

1

Mi experiencia en TCL es limitada a incursionar ocasionalmente. Sin embargo, seguir los enlaces que comienzan con el de la respuesta de @ jk me llevó al this page, que analiza la variable errorCode y cosas relacionadas que podrían ser útiles en esta circunstancia. Aquí está un ejemplo rápido que demuestra el uso de errorCode:

tcl:

set ret_val [catch { exec /bin/bash /path/to/bash_script }] 
set errc $errorCode 
set ret_val [lindex [split $errc " " ] 2] 
puts $ret_val 

bash_script, como referencia anteriormente:

#!/bin/bash 
exit 42 

que condujo a la producción de:

Cuestiones relacionadas