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