先日PowerShellがオープンソース化しLinuxやOS Xでも使える様になりましたが、 それに先駆けWindows内でLinuxをSubsystemとして動かしBashを使う機能が 正式にWindows 10に導入されています。
そこで無駄にPowerShellをそのSubsystem内のBash上で動かすということをやってみました。
PowerShell on Bash on Ubuntu on Windows
まず、Windows内でBashを使うBash on Ubuntu on Windowsについてはこちらから。
開発者モードにしてWindowsの機能の有効化から Windows Subsystem for Linux (Beta)を有効にするなど 少し使うまでに手順が必要です。
以前までは開発者、テスター向けのInsider Preview板ビルドにしか入ってませんでしたが、 先日のWindows 10 Anniversary Updateで通常の最新Windows 10の中にも 組み込まれる様になりました。
これでBashターミナルを立ち上げてLinuxのリリースなどを見て見ると、
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
と、Ubuntu 14.04が使われています。
ここにPowerShellを入れてみます。
Ubuntu 14.04なので、
$ sudo dpkg -i powershell_6.0.0-alpha.9-1ubuntu1.14.04.1_amd64.deb
Package installation instructions: https://github.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md
に従って、
$ sudo apt-get install libunwind8 libicu52
$ wget https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.9/powershell_6.0.0-alpha.9-1ubuntu1.14.04.1_amd64.deb
$ sudo dpkg -i powershell_6.0.0-alpha.9-1ubuntu1.14.04.1_amd64.deb
でOK。
Linuxの場合は/opt/以下にインストールされるとなっていますが、
実際、/opt/microsoft/powershell/6.0.0-alpha.9/
というディレクトリが出来ています。
これがPowerShell内での$PSHOME
になります。
powershell
コマンドは/usr/binにシンボリックリンクとしてインストールされていて、
$ ls -l /usr/bin/powershell
.... /usr/bin/powershll -> /opt/microsoft/powershell/6.0.0-alpha.9/powershell
となっています。
OS Xでは/usr/local/binにリンクが作られているのでちょっと注意。
取り敢えずインストールできたのでおもむろに立ち上げてみると、
こんな感じで上手く言ってる様に見えます。
が、何か出力を出すようなコマンドを打ってみると、
こんな感じでぐちゃぐちゃに。 ここでは
PS /home/user > Write-Host hoge
を二回行ってるだけです。
最初のコマンドもプロンプト部分が実行時に消されてコマンドが左詰めされていて、
さらに、2番目のコマンドは一番上のWrite-Host hoge
で、
何故かこの位置に表示され、以前の出力を上書きするような形になっています。
何の不具合かは分かりませんが、現状 PowerShell on Bash on Ubuntu on Windows (Bash上で立ち上げてるだけでUbuntu上で動いてるので PowerShell on Ubuntu on Windowsのが正しいかもしれませんが) は使えない、と言う状態みたいです。
まあ、まったくもって不毛な使い方なんでどうでもよいわけですが。
ただ、PowerShellのIssuesとかを見ていると特にtmuxやGNU screenでの 表示の乱れがあったりするみたいで、 その辺も全く無関係ではないのかもしれません。