MCPcopy Index your code
hub / github.com/coder/coder / CommandEnv

Method CommandEnv

agent/agentssh/agentssh.go:912–953  ·  view source on GitHub ↗
(ei usershell.EnvInfoer, addEnv []string)

Source from the content-addressed store, hash-verified

910}
911
912func (s *Server) CommandEnv(ei usershell.EnvInfoer, addEnv []string) (shell, dir string, env []string, err error) {
913 if ei == nil {
914 ei = &usershell.SystemEnvInfo{}
915 }
916
917 currentUser, err := ei.User()
918 if err != nil {
919 return "", "", nil, xerrors.Errorf("get current user: %w", err)
920 }
921 username := currentUser.Username
922
923 shell, err = ei.Shell(username)
924 if err != nil {
925 return "", "", nil, xerrors.Errorf("get user shell: %w", err)
926 }
927
928 dir = s.config.WorkingDirectory()
929
930 // If the metadata directory doesn't exist, we run the command
931 // in the users home directory.
932 _, err = os.Stat(dir)
933 if dir == "" || err != nil {
934 // Default to user home if a directory is not set.
935 homedir, err := ei.HomeDir()
936 if err != nil {
937 return "", "", nil, xerrors.Errorf("get home dir: %w", err)
938 }
939 dir = homedir
940 }
941 env = append(ei.Environ(), addEnv...)
942 // Set login variables (see `man login`).
943 env = append(env, fmt.Sprintf("USER=%s", username))
944 env = append(env, fmt.Sprintf("LOGNAME=%s", username))
945 env = append(env, fmt.Sprintf("SHELL=%s", shell))
946
947 env, err = s.config.UpdateEnv(env)
948 if err != nil {
949 return "", "", nil, xerrors.Errorf("apply env: %w", err)
950 }
951
952 return shell, dir, env, nil
953}
954
955// CreateCommand processes raw command input with OpenSSH-like behavior.
956// If the script provided is empty, it will default to the users shell.

Callers 1

CreateCommandMethod · 0.95

Calls 5

UserMethod · 0.65
ShellMethod · 0.65
HomeDirMethod · 0.65
EnvironMethod · 0.65
ErrorfMethod · 0.45

Tested by

no test coverage detected