WindowsのPowerShellでLinuxコマンドを実行する裏ワザ

Sponsored Link

近年、Windows Subsystem for Linux(WSL)の登場により、Windows環境でLinuxコマンドを簡単に実行できるようになりました。これにより、開発者やシステム管理者は、WindowsとLinuxの両方の利点を活かしながら作業を進めることが可能になりました。

本記事では、PowerShellを使用してLinuxコマンドを実行する方法と、そのための裏ワザを紹介します。

1. WSLのインストールと設定

まず、WSLをインストールする必要があります。WSLは、Windows 10以降のバージョンで利用可能です。以下の手順でWSLをインストールします。

  1. PowerShellを管理者として実行します。
  2. 次のコマンドを入力してWSLを有効化します。
    • wsl --install
  3. インストールが完了したら、PCを再起動します。
  4. Microsoft Storeから好みのLinuxディストリビューション(例:Ubuntu)をインストールします。

2. PowerShellからLinuxコマンドを実行する

WSLがインストールされたら、PowerShellからLinuxコマンドを実行する準備が整いました。基本的なコマンドの実行方法は以下の通りです。

2.1 基本的なコマンドの実行

PowerShellからLinuxコマンドを実行するには、wslコマンドを使用します。例えば、lsコマンドを実行するには次のようにします。

wsl ls -l

このコマンドは、Linuxのls -lコマンドを実行し、現在のディレクトリの内容をリスト表示します。

2.2 引数を含むコマンドの実行

引数を含むコマンドも同様に実行できます。例えば、特定のディレクトリの内容を表示する場合は次のようにします。

wsl ls -l /mnt/c/Users

ここでは、WindowsのCドライブ内のUsersディレクトリの内容を表示しています。

3. PowerShell関数ラッパーの作成

PowerShellからLinuxコマンドをより便利に使うために、関数ラッパーを作成することができます。これにより、毎回wslをプレフィックスとして付ける必要がなくなります。

3.1 関数ラッパーの作成

以下のスクリプトをPowerShellのプロファイルに追加します。これにより、指定したLinuxコマンドを直接呼び出せるようになります。

# PowerShellプロファイルに追加
$commands = "ls", "grep", "cat"

foreach ($command in $commands) {
    Remove-Item Alias:$command -ErrorAction SilentlyContinue
    Set-Item Alias:$command "wsl $command"
}

このスクリプトは、lsgrepcatの各コマンドに対して、wslをプレフィックスとして追加するエイリアスを作成します。

3.2 使用例

これで、次のようにコマンドを直接実行できるようになります。

ls -l /mnt/c/Users

このコマンドは、wsl ls -l /mnt/c/Usersと同じ結果を返します。

4. デフォルトパラメータの設定

Linuxコマンドにデフォルトの引数を設定することも可能です。これにより、毎回引数を指定する手間が省けます。

4.1 デフォルトパラメータの設定

以下のスクリプトをPowerShellプロファイルに追加します。

$WslDefaultParameterValues = @{}
$WslDefaultParameterValues["ls"] = "-AFh"

function global:ls() {
    param($args = @())
    $defaultArgs = $WslDefaultParameterValues["ls"]
    wsl ls $defaultArgs $args
}

このスクリプトでは、lsコマンドに-AFhオプションをデフォルトで追加しています。

4.2 使用例

これで、次のようにコマンドを実行できます。

ls

このコマンドは、wsl ls -AFhと同じ結果を返します。

5. 引数補完の設定

PowerShellでは、引数補完を設定することもできます。これにより、コマンドを入力する際に補完候補が表示され、作業が効率化されます。

5.1 引数補完の設定

以下のスクリプトをPowerShellプロファイルに追加します。

Register-ArgumentCompleter -CommandName "ls" -ScriptBlock {
    param($wordToComplete, $commandAst, $cursorPosition)
    $bashCompletion = "COMP_LINE='$commandAst'; COMP_WORDS=('$wordToComplete')"
    (wsl bash -c "$bashCompletion; complete -p ls")
}

このスクリプトは、lsコマンドに対して引数補完を設定します。

5.2 使用例

lsコマンドを入力し、TABキーを押すと、補完候補が表示されます。

6. まとめ

PowerShellを使用してLinuxコマンドを実行することは、WSLの導入により非常に簡単になりました。関数ラッパーやデフォルトパラメータ、引数補完を活用することで、より効率的に作業を進めることができます。これにより、WindowsとLinuxの両方の環境をシームレスに利用できるようになります。

参考リンク

タイトルとURLをコピーしました