🤬
Ruby - Terminate Batch Job (Y/N)?を消したかっただけ
始めに
Terminate batch job (Y/N)? Terminate batch job (Y/N)? Terminate batch job (Y/N)?
Terminate batch job (Y/N)?
、うるさいですよね。
それを何とかしたかっただけです。
プロンプトはどこから?
Terminate batch job (Y/N)?
はbatを終了するときに出てくるプロンプトです。Gemで追加されるコマンドはbatが使われているので出てきています。
batの終了時のTerminate batch job (Y/N)?
が出てきただけなのですが、bundle exec
などを使うとbat内でbatを起動するような状況になり、プロンプトが沢山出てきています(多分)。
batを置き換える
rufo.bat
@ECHO OFF
@"%~dp0ruby.exe" "%~dpn0" %*
シンプル!!!
これをexeにします。(Go触ったことないのでこれが一番時間かかりました)
runner.go
package main
import (
"os"
"os/exec"
"os/signal"
"path"
"strings"
"syscall"
)
func main() {
executable, _ := os.Executable()
executable = strings.Replace(executable, "\\", "/", -1)
trap := make(chan os.Signal, 1)
signal.Notify(trap, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGINT)
go func() {
<-trap
// Do nothing
}()
args := os.Args
base := executable[:len(executable)-4]
args[0] = base
directory := path.Dir(base)
cmd := exec.Command(directory+"/ruby.exe", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
cmd.Run()
}
Copilotにも手伝って貰いました。
これをRuby30/bin
に配置して実行!!!
戦いは続く
なぜか残っています。
戦いは続く
元のbatを消してみたりなど色々している間に原因を発見しました。
C:\develop\Ruby30\lib\ruby\gems\3.0.0\bin
こっちでのbatが残っていたようです。これも置き換えて実行!!!
完全勝利
そして
これを良い感じにして公開しました。(他環境での動作未検証)
最後に
Terminate batch job (Y/N)?
なしの 快適なrubygemsライフを!
Discussion