generating "," instead of keeping it in repository
This commit is contained in:
14
,
14
,
@@ -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
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
,
|
||||
*~
|
||||
|
||||
31
main.go
31
main.go
@@ -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":
|
||||
|
||||
20
readme.md
20
readme.md
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user