Tcl 如何获得';执行官';在调用shell中显示?

Tcl 如何获得';执行官';在调用shell中显示?,tcl,Tcl,我使用tcl gui只是为了帮助创建有效的命令行,否则这些命令行太烦人,无法输入。我只是希望执行的内容显示在启动gui的shell中,以及所有结果,就像我键入命令一样(下面的命令仅为“ls-l”) 没有结果。没有错误。但是,也没有控制台输出 我只是希望执行的内容显示在启动gui的shell中,以及所有结果 视情况而定,您有几种选择: (1) proc do_run{}{exec 1>@stdout 2>@stderr ls-la} 通过这些指令,运行exec的Tcl进程将显示已执行命令的stdo

我使用tcl gui只是为了帮助创建有效的命令行,否则这些命令行太烦人,无法输入。我只是希望执行的内容显示在启动gui的shell中,以及所有结果,就像我键入命令一样(下面的命令仅为“ls-l”)

没有结果。没有错误。但是,也没有控制台输出

我只是希望执行的内容显示在启动gui的shell中,以及所有结果

视情况而定,您有几种选择:

(1)
proc do_run{}{exec 1>@stdout 2>@stderr ls-la}

通过这些指令,运行
exec
的Tcl进程将显示已执行命令的stdout和stderr,就像它自己的一样

(2)
proc do_run{}{put[exec ls-la]}

在没有指令的情况下,如上所述,
exec
返回已执行命令的捕获标准输出。使用
put
将返回的标准输出打印到Tcl进程的标准输出。stderr将导致
exec
返回一个Tcl错误,该错误将以wish、Tk方式处理

(3)
proc do_run{}{exec>&@stdout ls-la}

如果您不想专门处理stderr,那么这将把两者都塑造成Tcl进程的stdout


另请参见。

尝试键入
echo$?
它将显示上次运行命令的返回值。您是指从shell返回的值吗?我需要让gui启动一个命令,一个模拟,就像我在shell中键入命令时所调用的那样。我不需要返回值。谢谢。我认为#3是我想要的,但为什么它不符合标准呢?我还不知道:无法执行“&>@stdout”:没有这样的文件或目录哦。ls很好,看起来我需要引用“ls-l”。再次感谢.Sry,这样我就引入了一个小问题:选项(3)是编写
&@stdout
,而不是
&>@stdout
。不需要引用,卡尔文先生,谢谢你的更正。现在很完美,不需要引用或逃避。
#!/usr/bin/wish

wm title . "Console wishing thingy"
wm minsize . 400 400
# -------------------------------------------------------------

set buttonFrame   [labelframe .button_frame   -borderwidth 1 -text "Buttons to Click"]

set quit_button   [button $buttonFrame.quit_button -text "Quit" -command "exit"]
set run_it_button [button $buttonFrame.run_it_button -text "execute ls -l" -command {do_run}]
pack $buttonFrame.quit_button   -side left
pack $buttonFrame.run_it_button -side right

grid $buttonFrame   -sticky w -pady 5

proc do_run {} {
        exec ls -l
}