我想在Tcl / Tk中创建一个简单的控制台
我有两个问题。首先用[glob *]更改每个*但是,当我的条目包含“ls -a”时,它不理解ls是命令而-a
是第一个arg。
我怎样设法做到这一点?
由于
proc execute {} {
# ajoute le contenu de .add_frame.add_entry
set value [.add_frame.add_entry get]
if {[string compare "$value" ""] == 1} {
.text insert end "\n\n% $value\n"
.text insert end [exec $value]
.add_frame.add_entry delete 0 end
}
}
frame .add_frame
label .add_frame.add_label -text "Nouvel élément : "
entry .add_frame.add_entry
button .add_frame.add_button -text "Executer" -command execute
button .add_frame.exit_button -text "Quitter" -command exit
bind .add_frame.add_entry <Return> execute
bind .add_frame.add_entry <KP_Enter> execute
bind . <Escape> exit
bind . <Control-q> exit
pack .add_frame.add_label -side left
pack .add_frame.exit_button -side right
pack .add_frame.add_button -side right
pack .add_frame.add_entry -fill x -expand true
pack .add_frame -side top -fill x
text .text
.text insert end "% Tcl/Tk Console"
pack .text -side bottom -fill both -expand true
答案 0 :(得分:7)
Tcl 8.5中的简单答案是使用它:
exec {*}$value
在8.4及之前,该语法不存在。这意味着许多人都这样写道:
eval exec $value
但实际上,安全版本就是其中之一:
eval exec [lrange $value 0 end]
eval [linsert $value 0 exec]
当然,如果$value
直接来自用户,那么您最好使用系统shell来评估它,因为更多用户期望这种语法:
exec /usr/bin/bash -c $value