2017-07-18 91 views
2

我在我的tcl腳本中生成了幾個實際用作perl腳本的開關的變量。如何通過使用exec從tcl運行的perl腳本傳遞開關

我的交換機是-X-Y-Z,我把它們存儲在一個變量,cmdset cmd "-X -Y -Z"

我使用exec來運行這樣的TCL perl腳本:

exec ./script.pl $cmd 

會拋出一個錯誤:"Error: Unknown option x -y -z"

然後我試了另一種方式:

exec ./script.pl -- $cmd 

對於這種特殊情況,perl腳本得到執行但沒有開關,即開關沒有被激活。

有什麼辦法可以解決這個問題嗎?

+1

我懷疑你的shell將'-X -Y -Z'解析爲* one *標誌,你需要將它們分成三個單獨的參數。 –

回答

3
set cmd "-X -Y -Z" 

創建一個字符串,其中包含-X -Y -Z。當您使用exec ./script.pl $cmd調用exec命令時,您傳遞的參數爲-X -Y -Z。你想要的是三個獨立的論點。要做到這一點,最好的辦法是:

exec ./script.pl {*}$cmd 

{*}運營商擴充列表成組成單詞。

這非常有用。你可以建立你的參數列表類似於(例子)代碼:

set cmd {} 
lappend cmd -X 
if { $mytest eq "true" } { 
    lappend cmd -Y 
} 
lappend cmd -Z 
if { $filename ne {} } { 
    lappend cmd -f 
    lappend cmd $filename 
} 
exec ./script.pl {*}$cmd 

與舊版本的Tcl,該eval命令必須使用:

eval exec ./script.pl $cmd 

編輯: - 參數exec

--自變量指定exec指定不再有開關(選項)將由exec解析。這允許exec用於命令以-開頭的情況。例如

exec -- -myweirdcommand 

參考文獻:Tcl Syntax (#5); eval; exec

+0

因爲我運行的是舊版本的TCL,所以第二個解決方案適用於我。第一個解決方案給了我一個錯誤:在大括號之後的額外字符。 反正出於好奇,我想知道exec中「 - 」的用法。手冊頁說它標誌着交換機的結束。將使用哪種特定情況。我認爲這將標誌着exec的開關結束,並會考慮perl腳本的參數,但我錯了。 – Deepak

相關問題