2024-01-16 16:11:04 -08:00
|
|
|
// Copyright 2023, Command Line Inc.
|
|
|
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
|
|
|
|
|
package shellutil
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"os"
|
|
|
|
|
"os/exec"
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
"github.com/wavetermdev/waveterm/waveshell/pkg/base"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const DefaultTermType = "xterm-256color"
|
|
|
|
|
const DefaultTermRows = 24
|
|
|
|
|
const DefaultTermCols = 80
|
|
|
|
|
|
2024-05-02 14:16:00 -07:00
|
|
|
func WaveshellEnvVars(termType string) map[string]string {
|
2024-01-16 16:11:04 -08:00
|
|
|
rtn := make(map[string]string)
|
|
|
|
|
if termType != "" {
|
|
|
|
|
rtn["TERM"] = termType
|
|
|
|
|
}
|
|
|
|
|
rtn["WAVESHELL"], _ = os.Executable()
|
2024-05-02 14:16:00 -07:00
|
|
|
rtn["WAVESHELL_VERSION"] = base.WaveshellVersion
|
2024-01-16 16:11:04 -08:00
|
|
|
return rtn
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func UpdateCmdEnv(cmd *exec.Cmd, envVars map[string]string) {
|
|
|
|
|
if len(envVars) == 0 {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
found := make(map[string]bool)
|
|
|
|
|
var newEnv []string
|
|
|
|
|
for _, envStr := range cmd.Env {
|
|
|
|
|
envKey := GetEnvStrKey(envStr)
|
|
|
|
|
newEnvVal, ok := envVars[envKey]
|
|
|
|
|
if ok {
|
|
|
|
|
if newEnvVal == "" {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
newEnv = append(newEnv, envKey+"="+newEnvVal)
|
|
|
|
|
found[envKey] = true
|
|
|
|
|
} else {
|
|
|
|
|
newEnv = append(newEnv, envStr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for envKey, envVal := range envVars {
|
|
|
|
|
if found[envKey] {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
newEnv = append(newEnv, envKey+"="+envVal)
|
|
|
|
|
}
|
|
|
|
|
cmd.Env = newEnv
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetEnvStrKey(envStr string) string {
|
|
|
|
|
eqIdx := strings.Index(envStr, "=")
|
|
|
|
|
if eqIdx == -1 {
|
|
|
|
|
return envStr
|
|
|
|
|
}
|
|
|
|
|
return envStr[0:eqIdx]
|
|
|
|
|
}
|