Files
commago/main.go

62 lines
1.2 KiB
Go

package main
import (
"errors"
"fmt"
"os"
)
var commaSh = `#!/bin/sh
script_path=$(realpath $0)
script_dir=$(dirname $script_path)
cd $script_dir
output=/tmp/commandgo
# why not just using "go run ." ?
# Because "go run ." will inject GOBIN into PATH while compiling,
# and modifed PATH will pass into actual program.
# So the program doesn't have the same PATH as outside.
# It's not a acceptable behavior.
go build -o $output . && $output $@
`
func commandsUsage() string {
return fmt.Sprintf(
`commands:
path %v
`, commandPathDescription)
}
func main() {
pwd, err := os.Getwd()
if err != nil {
panic(fmt.Errorf("detect current directory failed! %w", err))
}
target := pwd + string(os.PathSeparator) + ","
_, err = os.Stat(target)
if errors.Is(err, os.ErrNotExist) {
err := os.WriteFile(target, []byte(commaSh), 0755)
if err != nil {
panic(fmt.Errorf("write sh failed: %w", err))
}
}
if len(os.Args) >= 2 {
switch os.Args[1] {
case "path":
commandPath(os.Args[1:])
default:
fmt.Printf("unknow command `%v`\n\n", os.Args[1])
fmt.Printf("%v", commandsUsage())
os.Exit(1)
}
} else {
fmt.Println("Personal scripts set written in Golang\n")
fmt.Printf("%v", commandsUsage())
}
}