Observe que split não funciona como você parece pensar. Ele não se divide em uma palavra, mas em qualquer caractere dado na segunda cadeia. Por exemplo, split "xax" "abc" dividirá xax em 2 partes, apesar de não conter a seqüência abc .
Uma maneira simples de dividir uma string em uma determinada substring é, por exemplo, usar o comando string first para encontrar o início da substring e, em seguida, string range para copiar até esse ponto:
set str $expect_out(buffer)
set v [string range $str 0 [string first "\[root@" $str]-1]
Você pode testar v para vazio ou não.
Como alternativa, em vez de fazer expect "~]#" , por que não expect "\[root@" , então $expect_out(buffer) já conterá o que você deseja extrair.
Para versões anteriores de tcl / expect, talvez seja necessário usar expr para subtrair 1 do índice, em vez de permitir que string range aceite o número do formulário. Então use, por exemplo:
set v [string range $str 0 [expr [string first "\[root@" $str] - 1]]