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