从tcl脚本调用bash脚本并返回并退出状态

时间:2011-08-24 14:55:14

标签: bash tcl

我正在尝试从TCL脚本调用bash脚本,并且需要从bash脚本获取退出状态,或者至少将某些内容传回TCL脚本,以便我可以判断我的脚本是否成功执行。有什么建议?

3 个答案:

答案 0 :(得分:10)

请参阅http://wiki.tcl.tk/exec - 点击“显示讨论”按钮 - 这是一个非常详细的示例,说明如何完全按照您的要求进行操作。你需要的是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 :(得分:1)

你想要的是exec其结果将在返回值中,但是要注意有很多使用exec的陷阱,特别是如果你需要进行任何复杂的引用

答案 2 :(得分:1)

我在tcl的经验仅限于偶尔涉猎。但是,以@jk的答案开头的链接开始引导我this page讨论了errorCode变量以及可能对这种情况有用的相关事情。这是一个演示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,如上所述:

#!/bin/bash
exit 42

导致输出:

  

42