func ReadArgs()

in action/common/args.go [29:67]


func ReadArgs(in io.Reader) error {
	os.Args = []string{""}

	scanner := bufio.NewScanner(in)

	var lines []string

	for scanner.Scan() {
		line := strings.Trim(scanner.Text(), "\r\n ")
		if line[len(line)-1] == '\\' {
			line = line[:len(line)-1]
			lines = append(lines, line)
		} else {
			lines = append(lines, line)
			break
		}
	}

	argsStr := strings.Join(lines, " ")
	rawArgs := strings.Split(argsStr, "'")

	if len(rawArgs) != 1 && len(rawArgs) != 3 {
		return errors.New("read args from input error")
	}

	args := strings.Split(rawArgs[0], " ")

	if len(rawArgs) == 3 {
		args = append(args, rawArgs[1])
		args = append(args, strings.Split(rawArgs[2], " ")...)
	}

	for _, arg := range args {
		if arg != "" {
			os.Args = append(os.Args, strings.TrimSpace(arg))
		}
	}
	return nil
}