Quantcast
Viewing all articles
Browse latest Browse all 2722

WSLにpwsh入れてshebang(シェバン)使うとPowerShell開発で便利な時がある

基本は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上での開発をオススメします。


Viewing all articles
Browse latest Browse all 2722

Trending Articles