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 }