WSLプログラムの実行No.37636
あべのり さん 19/10/26 20:12
 
WSLがインストールされていると,コマンドラインからwsl <コマンド>とすると,WSL
でインストールされているプログラムが動くようです.例えば,コマンドプロンプト
にて
wsl ls
とすると,カレントディレクトリのファイル一覧を得ることができます.

ところが,これを秀丸の「プログラムの実行」から行うとエラーとなってしまいます.

コマンドライン:wsl ls
詳細設定:チェックしない
得られるエラー:ファイル名が見つかりません。

これを可能にすることはできますでしょうか?なお,実際にやりたいのはマクロから
の実行です.

よろしくお願いします.

環境:Windows 10 + 秀丸 8.89

[ ]
RE:37636 WSLプログラムの実行No.37638
Bull さん 19/10/27 18:39
 
秀丸ユーザーの Bull と申します。
正式な回答は後日あると思いますので、単なる情報提供ですが。

当方の環境
Windows10 Home (64bit)
秀丸(64bit) Version 8.90 Beta 3
では、秀丸から "wsl ls" の実行ができ、ディレクトリ内の一覧が
取得できています。

また、以下のマクロで秀丸で編集中のプログラムをコンパイルして
実行ファイル "a.out" が作成されます。
"wsl ./a.out" で実行もできます。

runex "wsl gcc %b",  // wsl の gcc でコンパイルする
  1,    //sync   0:async 1:sync
  0, "",   //stdin  0:none  1:auto 2:file 3:(reserve) 4:all 5:select
  7, "",   //stdout 0:none  1:auto 2:file 3:add file  4:new 5:insert 6:repla
ce, 7:output pane
  1, "",   //stderr 0:none  1:=out 2:file 3:add file  4:new 5:insert 6:repla
ce, 7:output pane
  1, "",   //folder 0:none  1:current 2:specify 3:(reserve) 4:exe's folder
  0,    //show   0:auto  1:show 2:hide
  1,    //nodraw 0:draw  1:no draw
  0;    //encode 0:ansi  2:unicode

とここまで書いて、過去に同様な事象があり調査したことを思い出しました。
秀丸は 32bit でしょうか?
wsl をインストールしていると言うことは、Windows は 64bit だと思いますが、
32bit のプログラムから、wsl.exe を実行することはちょっとだけ面倒です。

私もそれほど詳しくはないので概要だけですが、64bit の Windows には %SystemRoo
t%\System32
に 64bit のモジュールが、%SystemRoot%\SysWOW64 に 32bit のモジュールが格納さ
れています。
32bit のプロセスから %SystemRoot%\System32 にアクセスすると、%SystemRoot%\Sy
sWOW64 にリダイレクトされます。
(つまり、32bit プロセスからは本来の %SystemRoot%\System32 フォルダは見えな
いです)
wsl は 64bit 専用なので、%SystemRoot%\System32 にしかありません。(32bit の
wsl.exe はないです)
ですから 32bit の秀丸からは wsl.exe が見付からないと言うことになります。
32bit プロセスからは %SystemRoot%\sysnative で本来の %SystemRoot%\System32
にアクセスできますので、
秀丸からの“プログラムの実行”も "C:\Windows\sysnative\wsl ls" とすれば実行
できるのではないかと思います。

[ ]
RE:37638 WSLプログラムの実行No.37640
秀丸担当 さん 19/10/28 09:29
 

コントロールパネルのWindowsの機能の有効化でWindows Subsystem for LunixをONに
してみたところ、そうなる場合がありました。
Bullさんが書かれている通り、wsl.exeは64bit版のみのようで、秀丸エディタが32bi
t版だと見つからないようです。
32bit版では、C:\Windows\Sysnative\wsl.exeを実行するとできました。
逆に64bit版ではC:\Windows\Sysnativeが存在しないので、マクロからはplatform
キーワードで64bit版かどうかを判断して、getenv( "systemroot" )+"sysnative\\ws
l.exe";とするかどうかの処理を切り分けるしかなさそうです。

[ ]
RE:37640 WSLプログラムの実行No.37648
あべのり さん 19/10/28 21:48
 
どうもありがとうございます.お察しの通り32bit版を使っていました.お二人の仰
るとおり,C:\Windows\Sysnative\wsl.exeを実行したところ無事動きました.手元で
自分用に使うだけのマクロなのでこれで十分です.どうもありがとうございました.

[ ]