2013-02-24 659 views
0

我想在tcl文件中運行命令。據Unix examples,我寫道:如果我刪除EXEC線,沒有錯誤從TCL文件執行linux命令

couldn't execute "export": no such file or directory 
while executing 
"exec export LD_LIBRARY_PATH=/opt/gcc-4.1.2-built/lib64" 

.... 
exec export LD_LIBRARY_PATH=/opt/gcc-4.1.2-built/lib64 
puts $gofile "#!/bin/bash 
.... 

但是我得到這個錯誤。

+2

exec期望二進制文件的名稱。導出是一個shell命令。嘗試一些行:exec sh -c「export LD_LIBRARY_PATH =/opt/gcc-4.1.2-built/lib64 ....」 – kofemann 2013-02-24 12:56:56

+0

@tigran這不起作用,因爲環境變量只能從父項繼承到子項。無論sh過程如何處理它的環境,它都不會影響Tcl過程。 – potrzebie 2013-02-25 12:29:09

回答

3

設置環境變量,你不使用exec而是隻寫全球env關聯數組的適當元素(::是「這是一個全局變量」,可以如果你正在寫省略頂級腳本):

set ::env(LD_LIBRARY_PATH) "/opt/gcc-4.1.2-built/lib64" 

然後,你可以exec和值將被正確繼承:

puts $gofile "#!/bin/bash 
...." 

(我有點驚訝,你是p用這樣的多行腳本來分類,但如果它適合你,那很酷。不過,我發現,如果我這樣做,通常將事情分成多個文件會更好。它減少了頭部劃傷和混亂的數量,因爲你不會以最小的引用水平引用更多的引用。)