Windows ターミナルでCygwinを使いたい。
最短の方法(WSL内からCygwinへ切り替え)
WSL やCmd.exeから次のコマンドを打ち込めば、簡単にCygwin環境に入れる。
wsl から
/mnt/c/tools/cygwin/bin/bash.exe /bin/xhere /bin/bash ~
cmd.exe / powershell.exe からbatを実行
C:\tools\cygwin\Cygwin.bat
既存のターミナルが切り替わる。
私は、C:\tools\cygwin\
がインストール先なのでbashをそこから起動している。
Windows ターミナルにプロファイルを作る(chere利用)
こっちが王道の解決方法。ターミナルにプロファイルを作ってそこから、起動する。
ただし、今回は chere ( open cygwin here ) を活用して起動する。
なくても可能です(後述)
cygwin / xhere を準備
xhere は chere パッケージに含まれるので
.\cygwinsetup.exe --no-shortcuts --no-admin -q -P chere
コマンドからサクッとパッケージを突っ込めばいい。
ターミナルを設定する場合
次の画面のように、プロファイルを設定する
JSONにプロファイルを直接指定
.profiles.list[]
に次のエントリを追加する。
{ "guid": "{xxxx-xxxx-xxxx}", "name": "Cygwin", "suppressApplicationTitle": true, "commandline": "C:\\tools\\cygwin\\bin\\bash.exe /bin/xhere /bin/bash ~", "icon": "C:\\tools\\cygwin\\Cygwin-Terminal.ico", "useAcrylic" : true, "acrylicOpacity" : 0.6 }
guid は各自で新規作成する。
PS > [guid]::NewGuid()
chere を使わない場合
chere を使わない場合は、初期ディレクトリを指定しつつ、bashを指定すればいい。
bash.exeを指定しただけ(うまくいかない)
ただし上記の場合は、環境変数が引き継がれず、lsコマンドすら機能しないので、bash の引数などをうまく調整する必要がある。
Cygwin.batを指定する。
Cygwin.bat を指定すればいい。
Windows TerminalでCygwinが起動して嬉しい
便利
更に、Cygwinのショートカットをmintty から windows ターミナルに変えてもいいかもしれない。
まぁそこまでする必要もないか
まとめ
cygwin.batを使えばいいが、WSL内部からだとちょっと面倒くさい。
今回は、WSL内部からCygwin.batを起動出来ないので、xhere コマンドを経由してWSLからでも行えるようにした。そのためprofile からもxhere を使って指定している。
WSLv1 の未来は暗い。
私は、純粋なLinuxがほしいのでなく、WindowsをLinuxコマンドで操作したいので、基本的にCygwinで事足りるのだが、WSLv1でも同じことができるので、WSLv1を愛用している。
純粋なLinuxがほしければ、2万出せばMiniPCが買えるし、Raspi4もあるので特に困らない。Hyper-VでわざわざLinuxを仮想マシンにしてそこからネットワーク経由でWindowsを操作するのはなにか違うと思ってるが、MSは確実性をとってWSLv2にシフトしているし、Hyper-Vを使ってすべてのマシンが仮想環境で並列に動くようになっている。
ほしいのは、Powershell以外のコマンド体系。VimやAwkでwindowsのファイルを弄ったり、SCPで転送したりしたいわけで、Linux自体がほしいわけじゃない。その欲求を満たしてくれるWSLv1 が今後ずっと使えることはなさそうです。素直にPowershellを覚えるか、Cygwin使って事らしいです。
そのために、CygwinやMSYSをWindowsターミナルでも使えるように準備をしておいた。
WSLv2を使うのであれば、Hyper-VにUbuntuいれてMutipassで管理するんだよなぁ。