История изменений
Исправление Xenius, (текущая версия) :
Для однобайтных кодировок это работает прекрасно.
А то, что после cd может быть более одного пробела ты конечно не учитываешь.
Хороший пример того, как делать не надо.
Надо как-то так:
proc ::defined_commands::cd {directory} {
cd [file normalize $directory]
}
...
set command [split commandstring \s]
set command [lmap token $command {substitute stuff}]
...
if {[set foo [lindex $command 0]] in $valid_commands} {
::defined_commands::$foo [lrange $command 1 end]
} else {
puts stderr "myshell: ${foo}: command not found"
}
Исправление Xenius, :
Для однобайтных кодировок это работает прекрасно.
А то, что после cd может быть более одного пробела ты конечно не учитываешь.
Хороший пример того, как делать не надо.
Надо как-то так:
proc ::defined_commands::cd {directory} {
cd [file normalize $directory]
}
...
set command [split commandstring \s]
set command [lmap token $command {substitute stuff}]
...
if {[set foo [lindex $command 0]] in $valid_commands} {
::defined_commands::$foo [lrange $command 1 end]
} else {
puts stderr "myshell: ${foo}: command not found"
}
Исходная версия Xenius, :
Для однобайтных кодировок это работает прекрасно.
А то, что после cd может быть более одного пробела ты конечно не учитываешь. Лучший пример того, как делать не надо. Надо как-то так:
proc ::defined_commands::cd {directory} {
cd [file normalize $directory]
}
...
set command [split commandstring \s]
set command [lmap token $command {substitute stuff}]
...
if {[set foo [lindex $command 0]] in $valid_commands} {
::defined_commands::$foo [lrange $command 1 end]
} else {
puts stderr "myshell: ${foo}: command not found"
}