92 lines
1.7 KiB
Go
92 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func splitCommandLine(commandLine string) []string {
|
|
var args []string
|
|
var currentArg strings.Builder
|
|
inQuotes := false
|
|
|
|
for _, char := range commandLine {
|
|
if char == '"' {
|
|
inQuotes = !inQuotes // 切换引号状态
|
|
continue
|
|
}
|
|
|
|
if char == ' ' && !inQuotes {
|
|
// 如果不在引号内且遇到空格,表示参数结束
|
|
if currentArg.Len() > 0 {
|
|
args = append(args, currentArg.String())
|
|
currentArg.Reset()
|
|
}
|
|
continue
|
|
}
|
|
|
|
// 否则继续添加到当前参数
|
|
currentArg.WriteRune(char)
|
|
}
|
|
|
|
// 添加最后一个参数(如果有)
|
|
if currentArg.Len() > 0 {
|
|
args = append(args, currentArg.String())
|
|
}
|
|
|
|
return args
|
|
}
|
|
|
|
func GetWorkDir() string {
|
|
workDir, err := os.Getwd()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
return workDir
|
|
}
|
|
|
|
func GetDataDir() string {
|
|
dataDir := filepath.Join(GetWorkDir(), "data")
|
|
stat, err := os.Stat(dataDir)
|
|
if os.IsNotExist(err) || !stat.IsDir() {
|
|
err := os.Mkdir(dataDir, os.ModePerm)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
return dataDir
|
|
}
|
|
|
|
func GetWorkspaceDirs() []string {
|
|
dataDir := GetDataDir()
|
|
entries, err := os.ReadDir(dataDir)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
var workspaceArr []string
|
|
for _, entry := range entries {
|
|
if entry.IsDir() {
|
|
workspaceArr = append(workspaceArr, entry.Name())
|
|
}
|
|
}
|
|
return workspaceArr
|
|
}
|
|
|
|
func GetInstanceDirs() []string {
|
|
workspaceDir := filepath.Join(GetDataDir(), GetCurrWorkspace())
|
|
entries, err := os.ReadDir(workspaceDir)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
var instanceArr []string
|
|
for _, entry := range entries {
|
|
if entry.IsDir() {
|
|
instanceArr = append(instanceArr, entry.Name())
|
|
}
|
|
}
|
|
return instanceArr
|
|
}
|