2011-04-30 109 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