如何從TCL代碼打開一個新終端,執行一些操作(例如ls -l),獲取這些操作的結果並關閉該終端終奌站?TCL - 打開一個新終端,在已打開的終端上執行一些操作並關閉它
是否exec命令打開一個新的終端,並在終端中調用所有的操作,或者當我用exec調用例如「cd ..」時,該命令與linux終端和linux命令無關,那些只是純粹的tcl命令與linux標準命令具有相同的名稱?
如何從TCL代碼打開一個新終端,執行一些操作(例如ls -l),獲取這些操作的結果並關閉該終端終奌站?TCL - 打開一個新終端,在已打開的終端上執行一些操作並關閉它
是否exec命令打開一個新的終端,並在終端中調用所有的操作,或者當我用exec調用例如「cd ..」時,該命令與linux終端和linux命令無關,那些只是純粹的tcl命令與linux標準命令具有相同的名稱?
我已經做了我的任務,這一點:
set cvsUpdStr [exec $pathToCvsInYourSystem -qn upd]
它不會打開一個終端,但它的任務是:
cvsUpdStr
並且可以在以後使用此外,也可以用它與catch
,如果它是正確執行理解和避免錯誤:
if {[catch {exec $pathToCvsInYourSystem -qn upd} result]} {puts $result}
聽起來像是你想要的Expect。
您傳遞給exec
的任何命令都會發送到系統執行。 exec
不會打開一個終端窗口來執行此操作:它不需要像終端一樣僅打開一個GUI窗口來與底層系統進行交互。
幾個關於您的例子具體筆記命令:
ls
或ls -l
輸出不建議使用。假設你有一個奇怪但有效的文件名,如「foo \ nbar」。你最好迭代Tcl的glob
命令的結果。cd
恰好是一個Tcl命令。在Windows上,它可能會強制終端打開。這取決於執行的內容。 – 2011-05-01 10:22:12
+1。 exec幾乎肯定不是需要的 – 2011-05-01 18:19:05
你知道,'cd'是,不應該對自己的子進程來執行的命令? 「當前目錄」是一個在所有操作系統上都是進程本地/繼承的概念(好吧,也許不是在iOS或Android上,但是你沒有處理它們)。 – 2011-05-01 10:37:33
我剛想到「打開一個新終端」可能意味着這是在遠程系統上完成的。 *是這種情況嗎?*如果是,它確實會改變解決方案的性質。 – 2011-05-02 07:44:12
你應該認識到的一件事是,在Linux上(實際上在所有unix上),終端永遠不會返回執行它們的結果。事實上,它們通常返回0並且不會向stdout輸出任何內容。它是在終端中執行任務的shell(bash,ksh,csh,zsh,tclsh),終端本身就是GUI。所以如果你想得到shell操作的結果,終端肯定不是你想要啓動的。 – slebetman 2012-11-01 09:03:08