github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/shellwords/example_test.go (about)

     1  package shellwords_test
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"testing"
     7  
     8  	"github.com/bingoohuang/gg/pkg/shellwords"
     9  )
    10  
    11  func isSpace(r byte) bool {
    12  	switch r {
    13  	case ' ', '\t', '\r', '\n':
    14  		return true
    15  	}
    16  
    17  	return false
    18  }
    19  
    20  func TestParse(t *testing.T) {
    21  	line := `
    22  	/usr/bin/ls -la | sort 2>&1 | tee files.log
    23  	`
    24  	parser := shellwords.NewParser()
    25  
    26  	for {
    27  		args, err := parser.Parse(line)
    28  		if err != nil {
    29  			log.Fatal(err)
    30  		}
    31  
    32  		fmt.Println(args)
    33  
    34  		if parser.Position < 0 {
    35  			break
    36  		}
    37  
    38  		i := parser.Position
    39  
    40  		for ; i < len(line); i++ {
    41  			if isSpace(line[i]) {
    42  				break
    43  			}
    44  		}
    45  		fmt.Println(string([]rune(line)[parser.Position:i]))
    46  		line = string([]rune(line)[i+1:])
    47  	}
    48  }