画像を「起動」を MSYS で

なんかデジャブな気もするが。

1 me@host: ~$ dot wdakiko.gv.txt -Tpng -owdakiko.png

なんてことをコマンドラインから。GraphViz で png 作ってる。

コマンドラインで作業してるわけだから画像表示もコマンドラインから、としたい。

DomesTosDOS ではこれだけだよな:

1 c:\dom\e\s\tos> start wdakiko.png

MSYS の場合は、cmd.exe への MSYS 版ラッパーコマンド「cmd.exe」を使い(うぅややこしい):

1 me@host: ~$ cmd /c 'start wdakiko.png'

とする。

普通 DOS コマンドは「スイッチ」としてハイフンとスラッシュを同一視するが、この cmd は絶対にスラッシュでなければならない。逆に、一般に MSYS から Windows ネイティブの CUI コマンドを動かす際は、絶対にスラッシュを「スイッチ」として使ってはいけない(ハイフンを使う)のでますますややこしい(これは MSYS がスラッシュを見つけ次第「c:/msys/1.0」のように実パスに置換祭り始めるため)。

デジャブな気がしてもあえてこのネタなのは。

Unix生まれのアプリケーションが「Windows対応」すると、MSYSやcygwinに優しくしてくれない場合が多くて。cygwin はまだいい。MSYS の扱いは結構酷い。そして、「Windows版だから」というだけの理由で、トチ狂い祭BATだけが提供され、これを直接は起動できやしない。

この「cmdもどき」はそういうときのために使う。例えば SCons。

1 me@host: ~$ cmd /c 'c:/Python27/Scripts/scons.bat'

ほかにもやまほどある、こんなの。

たまーに Windows 版でも Unix 版と同じシェルスクリプトをそのままインストールしてくれるありがたい OSS もあるが、これが親切なのかズボラだからなのかはわからない。しかし、「親切に」Unix シェルスクリプトを除外し、「親切に」タコBATだけ置いてくれるのが迷惑極まりないことだけは確かである。(この手の「とっても御御御親切」は相当数は Java だということは内緒だ。(pythonのも結構多いけどな。))


2022-01-20追記:
この追記を書いてる今からは既に結構前なんだけれど、これより幾分進化したネタを2020年に書いてるので、興味があればどぞ: ctypes.windll.shell32.ShellExecute例