Open3

aqua の Windows 対応: 一部のツールが拡張子がないので実行できない問題

Shunsuke SuzukiShunsuke Suzuki

https://github.com/aquaproj/aqua/issues/883

os/exec の Cmd.Start は内部で exec#LookPath を呼んでいる。
https://pkg.go.dev/os/exec?GOOS=windows#Cmd.Start
https://pkg.go.dev/os/exec?GOOS=windows#LookPath
LookPath ではファイルに拡張子がない場合、
環境変数 PATHEXT で定義された拡張子(デフォルトは ".com", ".exe", ".bat", ".cmd") を補完して os.Stat で存在チェックをするので、ファイルが存在しないことになり、失敗する。

Windows は拡張子でファイルのタイプを判別しているので、基本拡張子が必要である。
PATHEXT で定義された拡張子は実行時に省略しても良いことになっているので、 exec#LookPath でもその仕様を反映しているのだろう。

ただし、 Git Bash では拡張子なしのコマンドも実行できるっぽい。

一部のツールは Windows 向けであっても拡張子なしで配布されているが、
これだと Cmd#Start で実行できない。

例えば argo-rollouts を見ると kubectl-argo-rollouts-windows-amd64 となっていて拡張子がない。

https://github.com/argoproj/argo-rollouts/releases/tag/v1.2.1

なのでインストール時にファイルを自動でリネームして拡張子をつけるとか、何かしらの工夫が必要

Shunsuke SuzukiShunsuke Suzuki
  1. url, asset, files.src の拡張子を補完する
  2. files.src のファイルをリネームして拡張子をつける

という 2 つの機能が必要。 complete_windows_exe は 1 に相当する