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