基本はWSL + VSCode で開発を行っているのですが、たまにWindows向けのランチャーとか作る場合があります。
小さなツールなら簡単なPowerShellでラッパー作るだけでWindowsでも動くようになる場合もあり便利なのですが、そのためにWSL抜けるのは面倒です。
じゃあ、WSLでPowerShell開発すればいいじゃんということで、このタイトルです。
PowerShell(pwsh)のインストール
インストールは公式の手順通りやれば簡単にできます。
https://docs.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-core-on-linux
VSCodeも当然PowerShell対応のExtentionが用意されているので、それを使います。
shebang(シェバン)
UNIXシェルからスクリプトを実行するインタプリタを指定する #!/bin/bash
とかの書き方です。
pwshが入っている環境で以下のように設定するだけで、実行権限つけてpwshでスクリプトが実行されるようになります。
#!/usr/bin/env pwsh
/usr/bin/env pwsh
の動きはシェルから直接実行してみるとわかります。PowerShellが立ち上がります。
$ /usr/bin/env pwsh
PowerShell 7.0.2
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
PS /mnt/c/Users/yusuke.otomo/>
これをスクリプトファイルの先頭につけるだけです。
#!/usr/bin/env pwsh$MY_TEXT="abcdefg"Write-Output$MY_TEXTWrite-Output$PSVersionTable
後は chmod +x my.ps1
みたいに実行権限つけるだけでWSL上でもPowerShellをシームレスに実行できます。(当然ですがWindows機能に依存したコマンドレットなどは実行できません)
$ ./my.ps1
abcdefg
Name Value
---------
PSVersion 7.0.2
PSEdition Core
GitCommitId 7.0.2
OS Linux 4.19.84-microsoft-standard #1 SMP Wed Nov 13 11:44:37 UTC 2019
Platform Unix
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
これで、コマンドライン作るWrapperスクリプトくらいなら、WSLから出なくても開発できるようになりました。
ただし、LinuxとWindowsなので、色々と予期せぬ挙動が出る場合があります。(改行とか、変な文字コード含まれるとか)
本当に単純なスクリプト出ない限りはWindows上での開発をオススメします。