You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
850 B
Go
42 lines
850 B
Go
1 year ago
|
package cmdline
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// LineBuild build command line string by given args.
|
||
|
func LineBuild(binFile string, args []string) string {
|
||
|
return NewBuilder(binFile, args...).String()
|
||
|
}
|
||
|
|
||
|
// ParseLine input command line text. alias of the StringToOSArgs()
|
||
|
func ParseLine(line string) []string {
|
||
|
return NewParser(line).Parse()
|
||
|
}
|
||
|
|
||
|
// Cmdline build
|
||
|
func Cmdline(args []string, binName ...string) string {
|
||
|
b := new(strings.Builder)
|
||
|
|
||
|
if len(binName) > 0 {
|
||
|
b.WriteString(binName[0])
|
||
|
b.WriteByte(' ')
|
||
|
}
|
||
|
|
||
|
for i, a := range args {
|
||
|
if i > 0 {
|
||
|
b.WriteByte(' ')
|
||
|
}
|
||
|
|
||
|
if strings.ContainsRune(a, '"') {
|
||
|
b.WriteString(fmt.Sprintf(`'%s'`, a))
|
||
|
} else if a == "" || strings.ContainsRune(a, '\'') || strings.ContainsRune(a, ' ') {
|
||
|
b.WriteString(fmt.Sprintf(`"%s"`, a))
|
||
|
} else {
|
||
|
b.WriteString(a)
|
||
|
}
|
||
|
}
|
||
|
return b.String()
|
||
|
}
|