github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/servant/job/util.go (about) 1 // Copyright 2015 unirita Inc. 2 // Created 2015/04/10 shanxia 3 4 package job 5 6 import ( 7 "fmt" 8 "regexp" 9 "strings" 10 ) 11 12 // 引数のセパレータ用正規表現オブジェクト 13 var paramRegex = readyRegex() 14 15 // 正規表現オブジェクトの生成 16 // 引数は半角スペースで分割するが、二重引用符で括られている半角スペースは分割に使用しない。 17 // 例: xxx.exe A "B C D" E F" G" 18 // arg[1] = "A" 19 // arg[2] = "B C D" 20 // arg[3] = "E" 21 // arg[4] = "F\" G\"" 22 func readyRegex() *regexp.Regexp { 23 return regexp.MustCompile("((\"[^\"]*\")|[^ ])((\"[^\"]*\")*[^ ]?)*") 24 } 25 26 // ジョブの実行時引数を分割する。 27 // 両端が二重引用符の場合は、引用符を除外する。 28 func paramSplit(params string) []string { 29 var p []string 30 b := paramRegex.FindAll([]byte(params), -1) 31 for i := 0; i < len(b); i++ { 32 tmp := fmt.Sprintf("%s", b[i]) 33 if tmp[0] == '"' && tmp[len(tmp)-1] == '"' { 34 tmp = tmp[1 : len(tmp)-1] 35 } 36 p = append(p, tmp) 37 } 38 return p 39 } 40 41 // 実行ファイル内に半角スペースが存在する場合に、二重引用符で括る 42 func shellFormat(shell string) string { 43 rc := shell 44 if sep := strings.IndexRune(shell, ' '); sep != -1 { 45 rc = "\"" + shell + "\"" 46 } 47 return rc 48 }