LINUX.ORG.RU

История изменений

Исправление 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"
}
(в cd ещё должна быть обработка исключений и вывод сообщений типа is not a directory)

Исправление 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"
}