2011-04-30 112 views
1

如何從TCL代碼打開一個新終端,執行一些操作(例如ls -l),獲取這些操作的結果並關閉該終端終奌站?TCL - 打開一個新終端,在已打開的終端上執行一些操作並關閉它

是否exec命令打開一個新的終端,並在終端中調用所有的操作,或者當我用exec調用例如「cd ..」時,該命令與linux終端和linux命令無關,那些只是純粹的tcl命令與linux標準命令具有相同的名稱?

+0

你知道,'cd'是,不應該對自己的子進程來執行的命令? 「當前目錄」是一個在所有操作系統上都是進程本地/繼承的概念(好吧,也許不是在iOS或Android上,但是你沒有處理它們)。 – 2011-05-01 10:37:33

+0

我剛想到「打開一個新終端」可能意味着這是在遠程系統上完成的。 *是這種情況嗎?*如果是,它確實會改變解決方案的性質。 – 2011-05-02 07:44:12

+0

你應該認識到的一件事是,在Linux上(實際上在所有unix上),終端永遠不會返回執行它們的結果。事實上,它們通常返回0並且不會向stdout輸出任何內容。它是在終端中執行任務的shell(bash,ksh,csh,zsh,tclsh),終端本身就是GUI。所以如果你想得到shell操作的結果,終端肯定不是你想要啓動的。 – slebetman 2012-11-01 09:03:08

回答

0

我已經做了我的任務,這一點:

set cvsUpdStr [exec $pathToCvsInYourSystem -qn upd] 

它不會打開一個終端,但它的任務是:

  1. 執行命令
  2. 結果被存儲在cvsUpdStr並且可以在以後使用

此外,也可以用它與catch,如果它是正確執行理解和避免錯誤:

if {[catch {exec $pathToCvsInYourSystem -qn upd} result]} {puts $result} 
2

您傳遞給exec的任何命令都會發送到系統執行。 exec不會打開一個終端窗口來執行此操作:它不需要像終端一樣僅打開一個GUI窗口來與底層系統進行交互。

幾個關於您的例子具體筆記命令:

  • 解析的lsls -l輸出不建議使用。假設你有一個奇怪但有效的文件名,如「foo \ nbar」。你最好迭代Tcl的glob命令的結果。
  • cd恰好是一個Tcl命令。
+1

在Windows上,它可能會強制終端打開。這取決於執行的內容。 – 2011-05-01 10:22:12

+0

+1。 exec幾乎肯定不是需要的 – 2011-05-01 18:19:05