2011-08-24 4 views
6

TCL 스크립트에서 bash 스크립트를 호출하려고하는데 bash 스크립트에서 종료 상태를 가져 오거나 최소한 TCL 스크립트로 다시 전달해야합니다. 스크립트가 성공적으로 실행되었는지 알 수 있습니다. 어떤 제안?tcl 스크립트에서 bash 스크립트 호출 및 상태 리턴 및 종료

+0

입니다. –

+0

@Simon Hibbs : tclsh의 bash 스크립트에서 종료 상태를 캡처하고 싶습니다. – tgai

답변

9

http://wiki.tcl.tk/exec을 참조하십시오 - "토론 표시"버튼을 클릭하십시오 - 당신이 요구하는 것을 정확하게하는 방법에 대한 매우 상세한 예가 있습니다. 당신이 생각해야 할 것은 어떻게 반환 TCL의 값, 또는 얼마나 배쉬에서 종료 상태를 반환하는 함정에 요구하는지 여부는 분명하지 않다 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

확실한 링크는 Tcl 8.6 문서의 예입니다. http://www.tcl.tk/man/tcl8.6/TclCmd/exec.htm#M29 –

+0

nice. Tcl 8.5 문서에는 동일한 예가 있습니다. http://www.tcl.tk/man/tcl8.5/TclCmd/exec.htm#M28 –

1

당신이 원하는 것은의 결과가 반환 값에있을 것입니다 exec이다, 그러나 간부를 사용하여 개는 많은 당신이

+0

그게 내 생각이지만 내 임원의 결과를 얻으려고 할 때 아무것도 얻지 못했던 것 같습니다. 나는 이와 같은 것을 시도 할 것이다 : set value [exec bash script.sh]와 값은 스크립트 종료 상태와 관계없이 아무 것도 포함하지 않을 것이다? – tgai

1

TCL의 내 경험이 제한되어 인용 복잡한 작업을 수행해야하는 경우 특히, 거기에 경고 때때로 가볍게 두들기. 그러나 @k의 대답으로 시작하는 링크를 따라가는 것은 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, 위의 언급과 같이

42

:의 출력을 주도

#!/bin/bash 
exit 42 

관련 문제