2012-11-12 327 views
4

我想從一個tcl腳本運行一個csh腳本。如何從tcl腳本運行csh腳本?

下面的TCL腳本調用csh腳本

#!/usr/bin/tclsh 


set scripts_path /scratch/TCL_scripts/scripts_adders 

set synthesis /scratch/TCL_scripts/synthesis.csh 


set files [glob -directory $scripts_path *] 
split $files 
set files [lsort $files] 
set i 1 

foreach script $files { 

    puts "hello" 
    # puts [pwd] 
    exec /bin/csh -c $synthesis 
    puts $i 

} 

和csh文件(的begining)低於:

#!/bin/csh -f 


echo abcdefgh 

當我只能從我的UNIX終端執行CSH文件,它工作正常。 當我打電話給我的Tcl腳本時,它運行並確實寫入「hello」並打印i,但csh文件未執行,因爲「abcdefgh」從未出現在終端中。我也嘗試了其他命令,而且我總是遇到同樣的問題:當我從Tcl腳本運行它時,csh腳本從未執行過,儘管它直接從終端運行時運行良好。

(我的兩個Tcl腳本來ANS CSH腳本是可執行的)

我應該做些什麼才能從我的Tcl腳本來運行我的CSH腳本呢?

非常感謝您

+0

作爲一個方面說明,對[split $ files]的調用是無關緊要的。首先,分割返回分割列表,而不是保存結果。其次,因爲glob已經將文件名作爲列表返回,並且如果將它視爲一個字符串並對其進行分割,那麼它只會結束使用空格的文件名。 – RHSeeger

回答

5

這個csh腳本確實是在運行,但默認情況下它的標準輸出成爲結果Tcl的exec命令(如果它產生在標準錯誤東西,這將成爲錯誤結果exec)。爲了使輸出和錯誤出現在終端上,你必須修改exec這樣的:

exec /bin/csh -c $synthesis >@stdout 2>@stderr 

>@說,「標準輸出重定向到以下通道」(在這種情況下stdout),以及2>@做標準錯誤也是一樣。

+0

非常感謝。這工作得很好! – Percy

+1

你也可以完成'puts [exec ...]'但我認爲我提出的更像你想要的。 –

+0

exec的「錯誤結果」在哪裏結束? – Scooter