2011-08-24 71 views
6

Tôi đang cố gắng gọi một tập lệnh bash từ tập lệnh TCL và cần thoát khỏi trạng thái thoát khỏi tập lệnh bash hoặc ít nhất là truyền lại tập lệnh TCL sao cho Tôi có thể biết liệu kịch bản của tôi có được thực hiện thành công hay không. Bất kỳ đề xuất?Gọi một tập lệnh bash từ tập lệnh tcl và trạng thái trở về và thoát

+0

Không rõ liệu bạn đang hỏi cách bẫy giá trị trả lại trong TCL hay cách trả lại trạng thái thoát khỏi bash. –

+0

@Simon Hibbs: Lý tưởng nhất là tôi muốn nắm bắt trạng thái thoát khỏi tập lệnh bash của tôi trong tclsh. – tgai

Trả lời

9

Xem http://wiki.tcl.tk/exec - nhấp vào nút "Hiển thị thảo luận" - có một ví dụ rất chi tiết về cách thực hiện chính xác những gì bạn đang yêu cầu. Những gì bạn cần mặc dù là 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

Liên kết dứt khoát là một ví dụ từ tài liệu Tcl 8.6: http://www.tcl.tk/man/tcl8.6/TclCmd/exec.htm#M29 –

+0

. tài liệu Tcl 8.5 có cùng ví dụ: http://www.tcl.tk/man/tcl8.5/TclCmd/exec.htm#M28 –

1

gì bạn muốn là exec kết quả trong số đó sẽ được tính vào giá trị lợi nhuận, được cảnh báo tuy nhiên có rất nhiều gotchas sử dụng exec, đặc biệt là nếu bạn cần phải làm bất cứ phức tạp trích dẫn

+0

Đó là những gì tôi nghĩ nhưng dường như không nhận được bất cứ điều gì khi tôi cố gắng để lấy kết quả của exec của tôi. Tôi sẽ thử một cái gì đó như thế này: giá trị thiết lập [exec bash script.sh] và giá trị sẽ không chứa bất cứ điều gì bất kể tình trạng thoát kịch bản là gì? – tgai

1

Kinh nghiệm của tôi trong TCL còn hạn chế thỉnh thoảng dabbling. Tuy nhiên, các liên kết sau bắt đầu bằng câu trả lời của @ jk dẫn tôi đến số this page thảo luận về biến errorCode và những thứ liên quan có thể hữu ích trong trường hợp này. Dưới đây là một ví dụ nhanh thiệu việc sử dụng 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, như tham chiếu ở trên:

#!/bin/bash 
exit 42 

dẫn đến sản lượng:

Các vấn đề liên quan