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.
ntool/ncli/util.go

148 lines
3.3 KiB
Go

package ncli
import (
"git.noahlan.cn/noahlan/ntool/internal/common"
"git.noahlan.cn/noahlan/ntool/ncli/cmdline"
"git.noahlan.cn/noahlan/ntool/nstr"
"strings"
)
// LineBuild build command line string by given args.
func LineBuild(binFile string, args []string) string {
return cmdline.NewBuilder(binFile, args...).String()
}
// BuildLine build command line string by given args.
func BuildLine(binFile string, args []string) string {
return cmdline.NewBuilder(binFile, args...).String()
}
// String2OSArgs parse input command line text to os.Args
func String2OSArgs(line string) []string {
return cmdline.NewParser(line).Parse()
}
// StringToOSArgs parse input command line text to os.Args
func StringToOSArgs(line string) []string {
return cmdline.NewParser(line).Parse()
}
// ParseLine input command line text. alias of the StringToOSArgs()
func ParseLine(line string) []string {
return cmdline.NewParser(line).Parse()
}
// QuickExec quick exec a simple command line
func QuickExec(cmdLine string, workDir ...string) (string, error) {
return ExecLine(cmdLine, workDir...)
}
// ExecLine quick exec an command line string
func ExecLine(cmdLine string, workDir ...string) (string, error) {
p := cmdline.NewParser(cmdLine)
// create a new Cmd instance
cmd := p.NewExecCmd()
if len(workDir) > 0 {
cmd.Dir = workDir[0]
}
bs, err := cmd.Output()
return string(bs), err
}
// ExecCommand alias of the ExecCmd()
func ExecCommand(binName string, args []string, workDir ...string) (string, error) {
return ExecCmd(binName, args, workDir...)
}
// ExecCmd a command and return output.
//
// Usage:
//
// ExecCmd("ls", []string{"-al"})
func ExecCmd(binName string, args []string, workDir ...string) (string, error) {
return common.ExecCmd(binName, args, workDir...)
}
// ShellExec exec command by shell
// cmdLine e.g. "ls -al"
func ShellExec(cmdLine string, shells ...string) (string, error) {
return common.ShellExec(cmdLine, shells...)
}
// CurrentShell get current used shell env file.
//
// eg "/bin/zsh" "/bin/bash".
// if onlyName=true, will return "zsh", "bash"
func CurrentShell(onlyName bool) (binPath string) {
return common.CurrentShell(onlyName)
}
// HasShellEnv has shell env check.
//
// Usage:
//
// HasShellEnv("sh")
// HasShellEnv("bash")
func HasShellEnv(shell string) bool {
return common.HasShellEnv(shell)
}
// BuildOptionHelpName for render flag help
func BuildOptionHelpName(names []string) string {
var sb strings.Builder
size := len(names) - 1
for i, name := range names {
sb.WriteByte('-')
if len(name) > 1 {
sb.WriteByte('-')
}
sb.WriteString(name)
if i < size {
sb.WriteString(", ")
}
}
return sb.String()
}
// ShellQuote quote a string on contains ', ", SPACE
func ShellQuote(s string) string {
var quote byte
if strings.ContainsRune(s, '"') {
quote = '\''
} else if s == "" || strings.ContainsRune(s, '\'') || strings.ContainsRune(s, ' ') {
quote = '"'
}
if quote > 0 {
ln := len(s) + 2
bs := make([]byte, ln)
bs[0] = quote
bs[ln-1] = quote
if ln > 2 {
copy(bs[1:ln-1], s)
}
s = string(bs)
}
return s
}
// OutputLines split output to lines
func OutputLines(output string) []string {
output = strings.TrimSuffix(output, "\n")
if output == "" {
return nil
}
return strings.Split(output, "\n")
}
// FirstLine from command output
//
// Deprecated: please use nstr.FirstLine
var FirstLine = nstr.FirstLine