0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windowsでzxを使うと(デフォルトでは)WSLで動く……?

Last updated at Posted at 2022-10-22

zxというのがございます。こちらの記事で詳しく紹介されています。

google謹製の、Javascriptでシェルを扱えるやつです。

これってwindowsに入れたらcmdが扱えてbatファイルとおさらばできるのか?いやいや、そんなわけないよなあ、と調べてみるも、ググラビリティの問題なのか、単に使ってる人がいないのか、あんまり(日本語の)情報が多くない気がする。
なればと、物は試しでやってみました。

(追記)cmdを扱う方法

コメントで教えていただきました。ありがとうございます!
以下の設定をすることでcmdが扱えるようになります(筆者はzx@8.0.2/Windows11Homeで確認)

$.shell = 'cmd.exe';
$.prefix = '';
$.verbose = false

当然ながら日本語を扱う場合はchcp 65001が必要です。気が向いたら別記事を立てます。

実験

とりあえずpowershellで作業してみます。npmでzxをグローバルインストールすると、すんなり入りました。

npm i -g zx

実行用のjsファイルを作ります。
await $`ここにコマンド`という書き方でシェルが実行できます。jsのテンプレートリテラルなので、変数を埋め込むと自動でエスケープしてくれたりしてべんり。
拡張子を.mjsにするとトップレベルでawaitが使えます。

test.mjs
await $`echo hello, zx!`

実行してみましょう。

zx test.mjs

以下、$はzxから走らせたコマンドです。

$ echo hello, zx!
hello, zx!

お、いけたいけた。ついでにもういっちょ。

$ ipconfig
/bin/bash: ipconfig: command not found
Error: /bin/bash: ipconfig: command not found
    at file:///C:/Users/<ユーザー名>/Desktop/zx/test.mjs:4:8
    exit code: 127 (Command not found)

さすがにcmdが扱えるなんてことはなくて、bashで動いてるんですね。
……いや、なんで?

WSLで動いてる?

なんでwindowsでbashが動いてるんだ?と思って、いろいろ試しました。

$ pwd
/mnt/c/Users/<ユーザー名>/Desktop/zx

/mntって、確かwslからwindowsを見るときのパスだったよな。WSLで動いてるのか?

試しに、wslに無いコマンドを打ってみて・・・

$ convert -size 100x100 xc:white test.png
Error: /bin/bash: convert: command not found

wslにconvertを入れて・・・

wsl
apt install imagemagick

もう一回打つと・・・?

$ convert -size 100x100 xc:white test.png
$ ls
basic1.png
test.mjs

なるほど。理屈はわからないけど、WSLで動いてるみたいです・・・。zxが中でなんかやっているのでしょう。
たぶんどっかには仕様が書いてあると思うんだけど、めんどくさいので調べるのはやめた。
誰か、なぜWSLで動くのか、教えてください。

WSLをインストールしてないマシンでやるとどうなるんだろう?

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?