parent
49c3a73563
commit
81073a0561
|
@ -28,48 +28,63 @@ import (
|
||||||
"github.com/docker/machine/libmachine/shell"
|
"github.com/docker/machine/libmachine/shell"
|
||||||
)
|
)
|
||||||
|
|
||||||
var shellConfigMap = map[string]map[string]string{
|
type shellData struct {
|
||||||
"fish": {
|
Prefix string
|
||||||
"Prefix": "set -gx ",
|
Suffix string
|
||||||
"Suffix": "\";\n", // semi-colon required for fish 2.7
|
Delimiter string
|
||||||
"Delimiter": " \"",
|
UnsetPrefix string
|
||||||
"UnsetPrefix": "set -e ",
|
UnsetSuffix string
|
||||||
"UnsetSuffix": ";\n",
|
UnsetDelimiter string
|
||||||
|
}
|
||||||
|
|
||||||
|
var shellConfigMap = map[string]shellData{
|
||||||
|
"fish": shellData{
|
||||||
|
"set -gx ",
|
||||||
|
"\";\n",
|
||||||
|
" \"",
|
||||||
|
"set -e ",
|
||||||
|
";\n",
|
||||||
|
" \"",
|
||||||
},
|
},
|
||||||
"powershell": {
|
"powershell": shellData{
|
||||||
"Prefix": "$Env:",
|
"$Env:",
|
||||||
"Suffix": "\"\n",
|
"\"\n",
|
||||||
"Delimiter": " = \"",
|
" = \"",
|
||||||
"UnsetPrefix": `Remove-Item Env:\\`,
|
`Remove-Item Env:\\`,
|
||||||
"UnsetSuffix": "\n",
|
"\n",
|
||||||
|
" = \"",
|
||||||
},
|
},
|
||||||
"cmd": {
|
"cmd": shellData{
|
||||||
"Prefix": "SET ",
|
"SET ",
|
||||||
"Suffix": "\n",
|
"\n",
|
||||||
"Delimiter": "=",
|
"=",
|
||||||
"UnsetPrefix": "SET ",
|
"SET ",
|
||||||
"UnsetSuffix": "\n",
|
"\n",
|
||||||
"setDelim": "=",
|
"=",
|
||||||
},
|
},
|
||||||
"emacs": {
|
"emacs": shellData{
|
||||||
"Prefix": "(setenv \"",
|
"(setenv \"",
|
||||||
"Suffix": "\")\n",
|
"\")\n",
|
||||||
"Delimiter": "\" \"",
|
"\" \"",
|
||||||
"UnsetPrefix": "(setenv \"",
|
"(setenv \"",
|
||||||
"UnsetSuffix": ")\n",
|
")\n",
|
||||||
"UnsetDelim": "\" nil",
|
"\" nil",
|
||||||
},
|
},
|
||||||
"bash": {
|
"bash": shellData{
|
||||||
"Prefix": "export ",
|
"export ",
|
||||||
"Suffix": "\"\n",
|
"\"\n",
|
||||||
"Delimiter": "=\"",
|
"=\"",
|
||||||
"UnsetPrefix": "unset ",
|
"unset ",
|
||||||
"UnsetSuffix": "\n",
|
"\n",
|
||||||
|
"=\"",
|
||||||
},
|
},
|
||||||
"none": {
|
"none": shellData{
|
||||||
"Prefix": "",
|
"",
|
||||||
"Suffix": "\n",
|
"\n",
|
||||||
"Delimiter": "=",
|
"=",
|
||||||
|
"",
|
||||||
|
"\n",
|
||||||
|
"=",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +142,7 @@ func CfgSet(ec EnvConfig, plz, cmd string) *Config {
|
||||||
shellKey = "bash"
|
shellKey = "bash"
|
||||||
}
|
}
|
||||||
shellParams := shellConfigMap[shellKey]
|
shellParams := shellConfigMap[shellKey]
|
||||||
s.Suffix, s.Prefix, s.Delimiter = shellParams["Suffix"], shellParams["Prefix"], shellParams["Delimiter"]
|
s.Suffix, s.Prefix, s.Delimiter = shellParams.Suffix, shellParams.Prefix, shellParams.Delimiter
|
||||||
|
|
||||||
if shellKey != "none" {
|
if shellKey != "none" {
|
||||||
s.UsageHint = generateUsageHint(ec.Shell, plz, cmd)
|
s.UsageHint = generateUsageHint(ec.Shell, plz, cmd)
|
||||||
|
@ -151,16 +166,22 @@ func SetScript(ec EnvConfig, w io.Writer, envTmpl string, data interface{}) erro
|
||||||
func UnsetScript(ec EnvConfig, w io.Writer, vars []string) error {
|
func UnsetScript(ec EnvConfig, w io.Writer, vars []string) error {
|
||||||
var sb strings.Builder
|
var sb strings.Builder
|
||||||
shCfg := shellConfigMap[ec.Shell]
|
shCfg := shellConfigMap[ec.Shell]
|
||||||
pfx, sfx, delim := shCfg["Prefix"], shCfg["Suffix"], shCfg["Delimiter"]
|
pfx, sfx, delim := shCfg.UnsetPrefix, shCfg.UnsetSuffix, shCfg.UnsetDelimiter
|
||||||
switch ec.Shell {
|
switch ec.Shell {
|
||||||
case "cmd", "emacs", "fish":
|
case "cmd", "emacs", "fish":
|
||||||
for _, v := range vars {
|
for _, v := range vars {
|
||||||
sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx))
|
if _, err := sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case "powershell":
|
case "powershell":
|
||||||
sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx))
|
if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx))
|
if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_, err := w.Write([]byte(sb.String()))
|
_, err := w.Write([]byte(sb.String()))
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -68,8 +68,8 @@ func TestUnsetScript(t *testing.T) {
|
||||||
ec EnvConfig
|
ec EnvConfig
|
||||||
expected string
|
expected string
|
||||||
}{
|
}{
|
||||||
{[]string{"foo"}, EnvConfig{"bash"}, `export foo"`},
|
{[]string{"foo"}, EnvConfig{"bash"}, `unset foo`},
|
||||||
{[]string{"bar"}, EnvConfig{"powershell"}, `$Env:bar"`},
|
{[]string{"bar"}, EnvConfig{"powershell"}, `Remove-Item Env:\\bar`},
|
||||||
{[]string{"baz"}, EnvConfig{"cmd"}, `SET baz=`},
|
{[]string{"baz"}, EnvConfig{"cmd"}, `SET baz=`},
|
||||||
}
|
}
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
|
|
Loading…
Reference in New Issue