generating "," instead of keeping it in repository

This commit is contained in:
2026-06-12 15:34:37 +08:00
parent edd950f38d
commit f3a2508798
4 changed files with 50 additions and 16 deletions

14
,
View File

@@ -1,14 +0,0 @@
#!/bin/sh
script_path=$(realpath $0)
script_dir=$(dirname $script_path)
cd $script_dir
output=/tmp/commandgo
# 为什么不直接使用 go run . 呢
# 因为 go run 编译时会往 PATH 里注入 Go 的 bin 目录,这个修改过后的 PATH 会传递给子进程
# 于是程序运行起来时获取的 PATH 环境变量和外界不一致,因此不用 go run . 编译运行
go build -o $output . && $output $@

1
.gitignore vendored
View File

@@ -1 +1,2 @@
,
*~

31
main.go
View File

@@ -1,10 +1,29 @@
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:
@@ -13,6 +32,18 @@ func commandsUsage() string {
}
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":

View File

@@ -2,5 +2,21 @@
Personal tools set written in Golang.
To use it just clone and add the directory to *PATH*.
Then type "," command, all commands will appear.
## How to run
0. Clone this repository to somewhere
0. Add the root directory to *PATH*
0. change directory to the root directory
0. Run `go run .` to generate "," command
0. Run "," command to see all commands
"," command can auto rebuild if you change the code in this repository.
Actually it always builds each time you type it! Because `go build` is
very fast and it has cache, it's not a problem in terms of speed.
## Q&A
Q: Why generating "," shell script instead of putting it in repository?
A: I like the repository keeps 100% Go source code. I tried writting ","
shell script as a Go source code with shebang, but it didn't work.