diff --git a/internal/controllers/terminal_controller.go b/internal/controllers/terminal_controller.go index b214705..2791c2a 100644 --- a/internal/controllers/terminal_controller.go +++ b/internal/controllers/terminal_controller.go @@ -2,7 +2,6 @@ package controllers import ( "bufio" - "fmt" "io" "net/http" "os" @@ -116,11 +115,9 @@ func (tc *TerminalController) handlePtyMode(conn *websocket.Conn, userID string) cmd.Env = append(cmd.Env, "PATH="+pathStr) } - // 注入环境变量 - envVars := tc.envService.GetEnvVarsByUserID(userID) - for _, env := range envVars { - cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", env.Name, env.Value)) - } + // 注入环境变量(支持同名合并) + envVars := tc.envService.GetFormattedEnvVarsByUserID(userID) + cmd.Env = append(cmd.Env, envVars...) ptmx, err := pty.Start(cmd) if err != nil { @@ -191,10 +188,9 @@ func (tc *TerminalController) handlePipeMode(conn *websocket.Conn, userID string cmd.Env = append(cmd.Env, "PATH="+pathStr) } - envVars := tc.envService.GetEnvVarsByUserID(userID) - for _, env := range envVars { - cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", env.Name, env.Value)) - } + // 注入环境变量(支持同名合并) + envVars := tc.envService.GetFormattedEnvVarsByUserID(userID) + cmd.Env = append(cmd.Env, envVars...) stdin, err := cmd.StdinPipe() if err != nil { diff --git a/internal/services/env_service.go b/internal/services/env_service.go index ddaf0bf..b2a3381 100644 --- a/internal/services/env_service.go +++ b/internal/services/env_service.go @@ -37,6 +37,12 @@ func (es *EnvService) GetEnvVarsByUserID(userID string) []models.EnvironmentVari return envs } +// GetFormattedEnvVarsByUserID 获取用户环境变量并格式化为 NAME=VALUE 格式(支持重名合并) +func (es *EnvService) GetFormattedEnvVarsByUserID(userID string) []string { + envs := es.GetEnvVarsByUserID(userID) + return es.formatEnvVars(envs) +} + func (es *EnvService) GetEnvVarsWithPagination(userID string, name string, page, pageSize int) ([]models.EnvironmentVariable, int64) { var envs []models.EnvironmentVariable var total int64