3
0

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 5 years have passed since last update.

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

Last updated at Posted at 2020-06-22

基本はWSL + VSCode で開発を行っているのですが、たまにWindows向けのランチャーとか作る場合があります。

小さなツールなら簡単なPowerShellでラッパー作るだけでWindowsでも動くようになる場合もあり便利なのですが、そのためにWSL抜けるのは面倒です。

じゃあ、WSLでPowerShell開発すればいいじゃんということで、このタイトルです。

PowerShell(pwsh)のインストール

インストールは公式の手順通りやれば簡単にできます。

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_TEXT

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

3
0
0

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?