1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Utils: Add ShellQuoteArguments

This commit is contained in:
Alexander Larsson 2013-09-12 15:17:39 +02:00
parent 0dd6c6645b
commit c5bc7d5158

View file

@ -1139,6 +1139,41 @@ func (e *StatusError) Error() string {
return fmt.Sprintf("Status: %d", e.Status) return fmt.Sprintf("Status: %d", e.Status)
} }
func quote(word string, buf *bytes.Buffer) {
// Bail out early for "simple" strings
if word != "" && !strings.ContainsAny(word, "\\'\"`${[|&;<>()~*?! \t\n") {
buf.WriteString(word)
return
}
buf.WriteString("'")
for i := 0; i < len(word); i++ {
b := word[i]
if b == '\'' {
// Replace literal ' with a close ', a \', and a open '
buf.WriteString("'\\''")
} else {
buf.WriteByte(b)
}
}
buf.WriteString("'")
}
// Take a list of strings and escape them so they will be handled right
// when passed as arguments to an program via a shell
func ShellQuoteArguments(args []string) string {
var buf bytes.Buffer
for i, arg := range args {
if i != 0 {
buf.WriteByte(' ')
}
quote(arg, &buf)
}
return buf.String()
}
func IsClosedError(err error) bool { func IsClosedError(err error) bool {
/* This comparison is ugly, but unfortunately, net.go doesn't export errClosing. /* This comparison is ugly, but unfortunately, net.go doesn't export errClosing.
* See: * See: