mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-02-22 02:41:23 +01:00
add function to detect user's shell
This commit is contained in:
parent
aa5c09368e
commit
9b380aee02
@ -9,6 +9,7 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/user"
|
||||
"path"
|
||||
"regexp"
|
||||
"runtime"
|
||||
@ -35,6 +36,7 @@ const PromptAppPathVarName = "PROMPT_APP_PATH"
|
||||
const PromptVersion = "v0.3.1"
|
||||
const PromptAuthKeyFileName = "prompt.authkey"
|
||||
const MShellVersion = "v0.3.0"
|
||||
const DefaultMacOSShell = "/bin/bash"
|
||||
|
||||
var SessionDirCache = make(map[string]string)
|
||||
var ScreenDirCache = make(map[string]string)
|
||||
@ -376,3 +378,30 @@ func MacOSRelease() string {
|
||||
})
|
||||
return osRelease
|
||||
}
|
||||
|
||||
var userShellRegexp = regexp.MustCompile(`^UserShell: (.*)$`)
|
||||
|
||||
// dscl . -read /User/[username] UserShell
|
||||
// defaults to /bin/bash
|
||||
func MacUserShell() string {
|
||||
osUser, err := user.Current()
|
||||
if err != nil {
|
||||
log.Printf("error getting current user: %v\n", err)
|
||||
return DefaultMacOSShell
|
||||
}
|
||||
ctx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second)
|
||||
defer cancelFn()
|
||||
userStr := "/Users/" + osUser.Name
|
||||
out, err := exec.CommandContext(ctx, "dscl", ".", "-read", userStr, "UserShell").CombinedOutput()
|
||||
if err != nil {
|
||||
log.Printf("error executing macos user shell lookup: %v %q\n", err, string(out))
|
||||
return DefaultMacOSShell
|
||||
}
|
||||
outStr := strings.TrimSpace(string(out))
|
||||
m := userShellRegexp.FindStringSubmatch(outStr)
|
||||
if m == nil {
|
||||
log.Printf("error in format of dscl output: %q\n", outStr)
|
||||
return DefaultMacOSShell
|
||||
}
|
||||
return m[1]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user