TCL - 打开一个新终端,在已打开的终端上执行一些操作并关闭它
如何从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}
您传递给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