2011-08-24 19 views
6

Bir TCL komut dosyasından bir bash komut dosyasını çağırmaya çalışıyorum ve bash komut dosyasından çıkış durumunu almam veya en azından bir şeyi tekrar TCL komut dosyasına geçirmeliyim. Scriptimin başarıyla yürütüldüğünü söyleyebilirim. Baska öneri?Bir tcl komut dosyasından bir bash komut dosyasını çağırıp döndürme ve durumdan çıkma durumu

+0

olduğunu. –

+0

@Simon Hibbs: İdeal olarak, tshsh'deki bash komut dosyasından çıkış durumunu yakalamak istiyorum. – tgai

cevap

9

Bkz. http://wiki.tcl.tk/exec - "Tartışı göster" düğmesine tıklayın - tam olarak ne sorduğunuzu nasıl yapacağınıza dair çok ayrıntılı bir örnek var. Ne olsa gerek nasıl bir dönüş TCL değeri, ya da nasıl bash bir çıkış durumuna döndürmek tuzak isteyen olmanıza net değil 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

Kesin bağlantı, Tcl 8.6 belgelerinden bir örnektir: http://www.tcl.tk/man/tcl8.6/TclCmd/exec.htm#M29 –

+0

güzel. Tcl 8.5 belgeleri aynı örneklere sahiptir: http://www.tcl.tk/man/tcl8.5/TclCmd/exec.htm#M28 –

1

Ne istiyorsun sonucu dönüş değeri olacaktır exec, ancak exec Sorunlar çoğu da

+0

Düşündüğüm şey buydu ama benim exec'mın sonucunu tutmaya çalıştığımda hiçbir şey elde edemedim. Bunun gibi bir şey deneyebilirim: set value [exec bash script.sh] ve değer, komut dosyalarının çıkış durumundan bağımsız olarak hiçbir şey içermiyor mu? – tgai

1

tcl Mulhause sınırlıdır alıntı herhangi kompleksi yapmak gerekir, özellikle vardır uyarılmalıdır ara sıra dabbling için. Ancak, @ jk'in cevabı ile başlayan aşağıdaki linkler beni bu durumda faydalı olabilecek errorCode değişkenini ve ilgili şeyleri tartışan this page'a götürdü. İşte errorCode kullanımını gösteren bir örnek aşağıda verilmiştir:

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, yukarıda referans olarak:

: çıkışında yol açtı

#!/bin/bash 
exit 42 

İlgili konular