diff --git a/pkg/commands/git_cmd_obj_builder.go b/pkg/commands/git_cmd_obj_builder.go index 7cb4f149641..21f300bb379 100644 --- a/pkg/commands/git_cmd_obj_builder.go +++ b/pkg/commands/git_cmd_obj_builder.go @@ -38,10 +38,6 @@ func (self *gitCmdObjBuilder) NewShell(cmdStr string) oscommands.ICmdObj { return self.innerBuilder.NewShell(cmdStr).AddEnvVars(defaultEnvVar) } -func (self *gitCmdObjBuilder) NewInteractiveShell(cmdStr string) oscommands.ICmdObj { - return self.innerBuilder.NewInteractiveShell(cmdStr).AddEnvVars(defaultEnvVar) -} - func (self *gitCmdObjBuilder) Quote(str string) string { return self.innerBuilder.Quote(str) } diff --git a/pkg/commands/oscommands/cmd_obj_builder.go b/pkg/commands/oscommands/cmd_obj_builder.go index 3e89ce10293..540487ed46e 100644 --- a/pkg/commands/oscommands/cmd_obj_builder.go +++ b/pkg/commands/oscommands/cmd_obj_builder.go @@ -14,8 +14,6 @@ type ICmdObjBuilder interface { New(args []string) ICmdObj // NewShell takes a string like `git commit` and returns an executable shell command for it e.g. `sh -c 'git commit'` NewShell(commandStr string) ICmdObj - // Like NewShell, but uses the user's shell rather than "bash", and passes -i to it - NewInteractiveShell(commandStr string) ICmdObj // Quote wraps a string in quotes with any necessary escaping applied. The reason for bundling this up with the other methods in this interface is that we basically always need to make use of this when creating new command objects. Quote(str string) string } @@ -45,23 +43,10 @@ func (self *CmdObjBuilder) NewWithEnviron(args []string, env []string) ICmdObj { } func (self *CmdObjBuilder) NewShell(commandStr string) ICmdObj { - quotedCommand := self.quotedCommandString(commandStr) - cmdArgs := str.ToArgv(fmt.Sprintf("%s %s %s", self.platform.Shell, self.platform.ShellArg, quotedCommand)) - - return self.New(cmdArgs) -} - -func (self *CmdObjBuilder) NewInteractiveShell(commandStr string) ICmdObj { - quotedCommand := self.quotedCommandString(commandStr) - cmdArgs := str.ToArgv(fmt.Sprintf("%s %s %s %s", self.platform.InteractiveShell, self.platform.InteractiveShellArg, self.platform.ShellArg, quotedCommand)) - - return self.New(cmdArgs) -} - -func (self *CmdObjBuilder) quotedCommandString(commandStr string) string { + var quotedCommand string // Windows does not seem to like quotes around the command if self.platform.OS == "windows" { - return strings.NewReplacer( + quotedCommand = strings.NewReplacer( "^", "^^", "&", "^&", "|", "^|", @@ -69,9 +54,13 @@ func (self *CmdObjBuilder) quotedCommandString(commandStr string) string { ">", "^>", "%", "^%", ).Replace(commandStr) + } else { + quotedCommand = self.Quote(commandStr) } - return self.Quote(commandStr) + cmdArgs := str.ToArgv(fmt.Sprintf("%s %s %s", self.platform.Shell, self.platform.ShellArg, quotedCommand)) + + return self.New(cmdArgs) } func (self *CmdObjBuilder) CloneWithNewRunner(decorate func(ICmdObjRunner) ICmdObjRunner) *CmdObjBuilder { diff --git a/pkg/commands/oscommands/dummies.go b/pkg/commands/oscommands/dummies.go index ab528782fa6..3f72a6f0652 100644 --- a/pkg/commands/oscommands/dummies.go +++ b/pkg/commands/oscommands/dummies.go @@ -51,13 +51,11 @@ func NewDummyCmdObjBuilder(runner ICmdObjRunner) *CmdObjBuilder { } var dummyPlatform = &Platform{ - OS: "darwin", - Shell: "bash", - InteractiveShell: "bash", - ShellArg: "-c", - InteractiveShellArg: "-i", - OpenCommand: "open {{filename}}", - OpenLinkCommand: "open {{link}}", + OS: "darwin", + Shell: "bash", + ShellArg: "-c", + OpenCommand: "open {{filename}}", + OpenLinkCommand: "open {{link}}", } func NewDummyOSCommandWithRunner(runner *FakeCmdObjRunner) *OSCommand { diff --git a/pkg/commands/oscommands/os.go b/pkg/commands/oscommands/os.go index cbeb99d4364..dc5ef222c47 100644 --- a/pkg/commands/oscommands/os.go +++ b/pkg/commands/oscommands/os.go @@ -35,13 +35,11 @@ type OSCommand struct { // Platform stores the os state type Platform struct { - OS string - Shell string - InteractiveShell string - ShellArg string - InteractiveShellArg string - OpenCommand string - OpenLinkCommand string + OS string + Shell string + ShellArg string + OpenCommand string + OpenLinkCommand string } // NewOSCommand os command runner diff --git a/pkg/commands/oscommands/os_default_platform.go b/pkg/commands/oscommands/os_default_platform.go index 196e4d9f634..fd4967d9576 100644 --- a/pkg/commands/oscommands/os_default_platform.go +++ b/pkg/commands/oscommands/os_default_platform.go @@ -4,26 +4,15 @@ package oscommands import ( - "os" "runtime" ) func GetPlatform() *Platform { return &Platform{ - OS: runtime.GOOS, - Shell: "bash", - InteractiveShell: getUserShell(), - ShellArg: "-c", - InteractiveShellArg: "-i", - OpenCommand: "open {{filename}}", - OpenLinkCommand: "open {{link}}", + OS: runtime.GOOS, + Shell: "bash", + ShellArg: "-c", + OpenCommand: "open {{filename}}", + OpenLinkCommand: "open {{link}}", } } - -func getUserShell() string { - if shell := os.Getenv("SHELL"); shell != "" { - return shell - } - - return "bash" -} diff --git a/pkg/commands/oscommands/os_windows.go b/pkg/commands/oscommands/os_windows.go index 32cd59edb0a..783f50518a1 100644 --- a/pkg/commands/oscommands/os_windows.go +++ b/pkg/commands/oscommands/os_windows.go @@ -2,10 +2,8 @@ package oscommands func GetPlatform() *Platform { return &Platform{ - OS: "windows", - Shell: "cmd", - InteractiveShell: "cmd", - ShellArg: "/c", - InteractiveShellArg: "", + OS: "windows", + Shell: "cmd", + ShellArg: "/c", } } diff --git a/pkg/gui/controllers/shell_command_action.go b/pkg/gui/controllers/shell_command_action.go index 01b6d1e3604..547ab012d8a 100644 --- a/pkg/gui/controllers/shell_command_action.go +++ b/pkg/gui/controllers/shell_command_action.go @@ -31,7 +31,7 @@ func (self *ShellCommandAction) Call() error { self.c.LogAction(self.c.Tr.Actions.CustomCommand) return self.c.RunSubprocessAndRefresh( - self.c.OS().Cmd.NewInteractiveShell(command), + self.c.OS().Cmd.NewShell(command), ) }, HandleDeleteSuggestion: func(index int) error {