mirror of https://github.com/docker/cli.git
Removed interactive mode ('docker -i'). Cool UI experiment but seems more trouble than it's worth
This commit is contained in:
parent
c4a0001d99
commit
ae5f2d9a56
73
client.go
73
client.go
|
@ -4,12 +4,8 @@ import (
|
||||||
"../future"
|
"../future"
|
||||||
"../rcli"
|
"../rcli"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"path"
|
|
||||||
"path/filepath"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Run docker in "simple mode": run a single command and return.
|
// Run docker in "simple mode": run a single command and return.
|
||||||
|
@ -55,72 +51,3 @@ func SimpleMode(args []string) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run docker in "interactive mode": run a bash-compatible shell capable of running docker commands.
|
|
||||||
func InteractiveMode(scripts ...string) error {
|
|
||||||
// Determine path of current docker binary
|
|
||||||
dockerPath, err := exec.LookPath(os.Args[0])
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
dockerPath, err = filepath.Abs(dockerPath)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a temp directory
|
|
||||||
tmp, err := ioutil.TempDir("", "docker-shell")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(tmp)
|
|
||||||
|
|
||||||
// For each command, create an alias in temp directory
|
|
||||||
// FIXME: generate this list dynamically with introspection of some sort
|
|
||||||
// It might make sense to merge docker and dockerd to keep that introspection
|
|
||||||
// within a single binary.
|
|
||||||
for _, cmd := range []string{
|
|
||||||
"help",
|
|
||||||
"run",
|
|
||||||
"ps",
|
|
||||||
"pull",
|
|
||||||
"put",
|
|
||||||
"rm",
|
|
||||||
"kill",
|
|
||||||
"wait",
|
|
||||||
"stop",
|
|
||||||
"start",
|
|
||||||
"restart",
|
|
||||||
"logs",
|
|
||||||
"diff",
|
|
||||||
"commit",
|
|
||||||
"attach",
|
|
||||||
"info",
|
|
||||||
"tar",
|
|
||||||
"web",
|
|
||||||
"images",
|
|
||||||
"docker",
|
|
||||||
} {
|
|
||||||
if err := os.Symlink(dockerPath, path.Join(tmp, cmd)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run $SHELL with PATH set to temp directory
|
|
||||||
rcfile, err := ioutil.TempFile("", "docker-shell-rc")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer os.Remove(rcfile.Name())
|
|
||||||
io.WriteString(rcfile, "enable -n help\n")
|
|
||||||
os.Setenv("PATH", tmp+":"+os.Getenv("PATH"))
|
|
||||||
os.Setenv("PS1", "\\h docker> ")
|
|
||||||
shell := exec.Command("/bin/bash", append([]string{"--rcfile", rcfile.Name()}, scripts...)...)
|
|
||||||
shell.Stdin = os.Stdin
|
|
||||||
shell.Stdout = os.Stdout
|
|
||||||
shell.Stderr = os.Stderr
|
|
||||||
if err := shell.Run(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue