2011-08-24 11 views
6

私はTCLスクリプトからbashスクリプトを呼び出そうとしていますが、bashスクリプトから終了ステータスを取得するか、少なくともTCLスクリプトに何かを戻す必要があります。スクリプトが正常に実行されたかどうかを確認できます。助言がありますか?tclスクリプトからbashスクリプトを呼び出してステータスを返す/終了する

+0

であるそれはあなたがどのようにTCLでトラップ戻り値を、またはどのようにbashのから終了ステータスを返すために求めているかどうかは明らかではありません。 –

+0

@Simon Hibbs:理想的には、tclshのbashスクリプトから終了ステータスを取得したいと考えています。 – tgai

答えて

9

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

最終的なリンクは、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である、しかしEXECを使用して落とし穴の多くは、あなたが

+0

これは私が思ったものですが、エグゼクティブの結果を取得しようとしたときに何も得られなかったようです。私はこのような何かを試してみる:設定値[exec bash script.sh]と値は、スクリプトの終了ステータスに関係なく何も含まれていないだろうか? – tgai

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 

関連する問題