При попытке объединить две строки они объединяются, но следующие три символа перезаписывают ранее объединенный текст, прежде чем снова продолжить объединение, как и ожидалось. Я подозреваю, что это как-то связано с функцией retrieve_mapped_value(cmd.Interaction.Replies[p_index].Variable[r_index], var_swap)
, так как этот феномен только происходит, когда он вызывается в двойном for
разделе cmd.Interaction
build_executable
.
Где ошибка
func build_executable(cmd shell_command, var_swap string_matrix, is_first bool) string{
sleep_duration := cmd.Sleep
result := ""
if !is_first{
result = "send \""
} else {
result = "spawn "
}
result += cmd.Command
if len(cmd.Options.Dashes) > 0 {
for index := range cmd.Options.Dashes{
if cmd.Options.Dashes[index] != "" || cmd.Options.Flags[index] != ""{
result += " " + cmd.Options.Dashes[index] + cmd.Options.Flags[index]
}
if cmd.Options.Values[index] != ""{
result += " " + cmd.Options.Values[index]
}
}
}
if len(cmd.Targets.Litteral) > 0{
result += " "
for index := range cmd.Targets.Litteral{
result += cmd.Targets.Litteral[index] + retrieve_mapped_value(cmd.Targets.Variable[index], var_swap)
}
}
if !is_first{
result += "\\r\"\n"
} else {
result += "\n"
}
result += "sleep " + sleep_duration + "\n"
if len(cmd.Interaction.Prompts) > 0{
for p_index := range cmd.Interaction.Prompts{
fmt.Println("cmd.Interaction.Prompts[p_index]\t" + cmd.Interaction.Prompts[p_index])
result += "expect \"" + cmd.Interaction.Prompts[p_index] + "\"\nsend \""
for r_index := range cmd.Interaction.Replies[p_index].Litteral{
fmt.Println("cmd.Interaction.Replies[p_index].Litteral[r_index]\t'" + cmd.Interaction.Replies[p_index].Litteral[r_index] + "'")
fmt.Println("cmd.Interaction.Replies[p_index].Variable[r_index]\t'" + cmd.Interaction.Replies[p_index].Variable[r_index] + "'")
fmt.Println("retrieve_mapped_value(cmd.Interaction.Replies[p_index].Variable[r_index], var_swap)\t'" + retrieve_mapped_value(cmd.Interaction.Replies[p_index].Variable[r_index], var_swap) + "'")
result += cmd.Interaction.Replies[p_index].Litteral[r_index]
result += retrieve_mapped_value(cmd.Interaction.Replies[p_index].Variable[r_index], var_swap)
result += "" + "" + ""
}
result += "\\r\"\nsleep " + sleep_duration + "\n"
}
}
if cmd.Expects != "" {
result += "expect \"" + cmd.Expects + "\"\n"
}
return result
}
Подозреваемая функция
func retrieve_mapped_value(key string, mapping string_matrix) string{
if key != "" {
for _, layer := range mapping{
if layer[0] == key {
return layer[1]
}
}
} else {
return key
}
return "***No Match Error***"
}
Что я должен получить
expect "Enter password for user root: "
send "e3H-*HGHu__7\r"
sleep 10
Что я на самом деле получаю
expect "Enter password for user root: "
\r"d "e3H-*HGHu__7
sleep 10
Он берет последние 3 символа одной строки и перезаписывает ими переднюю часть. Я не понимаю.