ちょっとした小手先テクの話です。
自作のコマンドラインツールを作った場合、困るのが配置方法です。
例えば、以下のようなケースがあったとき、CLIで使いたいならPATH
を通したくなるのだが、それだとどんどん増えちゃいますよね。
.
├── test.exe
└── lib.dll
こんな時に使えるテクニックがあって、それは「シェルスクリプトで代行する」です。 …というかNodeのやり方をパクってるだけなのですが。
例えば、~/.local/bin
にPATHを通しているなら、以下のようなコマンドと同名のシェルスクリプトを書いて、
.Cmd
に対応するところにコマンドの絶対パスが入るとか、そういう感じにすれば良い。
これでシンボリックリンクの代わりになるようなファイルが作れます。
ちなみにこれの良い所は、実行主体はそのままなのでWindowsだとDLLの検知範囲に入るところ。これが実はシンボリックリンクだと、リンクを貼っている方のフォルダが実行フォルダと見做されるので、Windowsのルール上DLLの検知に入らないのです。なので、ダイナミックライブラリを一緒においた時、それも一緒にPATHの通っているところにシンボリックリンクを貼るなどしないといけない。
#!/bin/sh
exec "{{ .Cmd }}" "$@"
同じことはPowershellでも出来る。
#!/usr/bin/env pwsh
$exe = ""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
$exe = ".exe"
}
$ret = 0
if ($MyInvocation.ExpectingInput) {
$input | & "{{ .Cmd }}$exe" $args
}
else {
& "{{ .Cmd }}$exe" $args
}
$ret = $LASTEXITCODE
exit $ret
なので、自分はツール化してみた。…が、ちょっと今はとりあえず非公開。。
これで結構スッキリします。
後日
自作ツールだが、思いの外役に立っている。 Ubuntu Waylandだと自作ツールだけでなく、VSCodeの入力バグが結構やばいということが分かり、オプションとか貼ったファイルを作っておくとしのげるので便利だとわかった。
ちなみに、典型的なやつでこれのネイティブ Wayland サポートの項である。
これはChromeが修正され、Electronの次期リリースに修正される可能性が高いらしいが、トリアージとして--ozone-platform=wayland
しておいているので、しのげる。素晴らしい。