MENU

WSL2でMacのようにクリップボードを操作する方法

Macだとpbcopyやpbpasteといったコマンドでクリップボードの内容をターミナル上で扱うことができて、これが非常に便利。Windowsでも同じことができないか、ChatGPT-4に聞いたところ非常にうまくいったので、ブログ記事としてまとめさせた。

目次

イントロ

Windows Subsystem for Linux 2(WSL2)は、Windows上でLinuxを動作させることができる強力なツールです。しかし、Macユーザーが利用できる便利なpbcopypbpasteコマンドのような、クリップボードに直接アクセスする機能がデフォルトではありません。この記事では、WSL2でこれらのコマンドを模倣する方法を解説します。

Windowsのクリップボードにコピー

WSL2からWindowsのクリップボードにコピーするには、Windows側のclip.exeコマンドを利用します。例えば次のようにします:

echo 'テキスト' | clip.exe

Windowsのクリップボードからペースト

逆に、WindowsのクリップボードからWSL2にペーストするには、powershell.exeを利用します:

powershell.exe -command 'Get-Clipboard'

コマンドを短くする

これらのコマンドは有用ですが、特にペーストの方は長く、打つのが面倒かもしれません。それを解決するために、pbcopypbpasteというエイリアスを定義します。

bashの場合

bash シェルを使っている場合、.bashrc ファイルに以下のエイリアスを追加します:

alias pbcopy='clip.exe'
alias pbpaste='powershell.exe -command Get-Clipboard'

そして、ターミナルを再起動するか、以下のコマンドを実行して新しいエイリアスを利用可能にします:

source ~/.bashrc

これで、Macのように pbcopypbpaste コマンドを使用することができます。

fishの場合

Fish shellでは、関数として定義して、config.fishファイルに保存することで、同様の機能を実現できます。

まず、Fish shellで新しい関数を作成します:

function pbcopy
    command echo -n $argv | clip.exe
end

function pbpaste
    powershell.exe -command 'Get-Clipboard' 
end

次に、これらの関数を保存します。以下のコマンドは、作成した関数を ~/.config/fish/functions/ ディレクトリに保存します:

funcsave pbcopy
funcsave pbpaste

以上の手順で、pbcopypbpasteの機能をFish shellで使用できるようになります。新たなシェルセッションでもこれらの関数が使用可能になるよう、手動で定義するのではなく、funcsave コマンドを使って保存することが重要です。

結論

これにより、WSL2でもMacのようにクリップボードを操作することが可能になります。この機能を利用すれば、シェルスクリプトやコマンドラインツールから直接クリップボードにアクセスすることができ、作業の効率を上げることができます。

寸評

これでWSL2でもpbcopypbpasteといったコマンドを使えるようになった。pbcopyで一行改行ができるのが少し気になるが……。まぁでもこれは便利だね。

以下、質問した内容。

  1. Macではpbcoyやpbpasteでクリップボードの内容をターミナルで利用できますが、WindowsのWSL2で同じようなことはできませんか
  2. いいね。しかし、clip.exeはいいがペーストのほうはコマンドが長すぎる。
  3. 最高だ。完璧に
    • まちがって途中で送信してしまった
  4. それでは、この素晴らしい方法を、いつでも思い出して使えるように、あるいは他の人もできるように、ブログ記事としてまとめてくれ。
  5. fishだとどうなる?

今回は記事の方もあまり手直ししていない。

目次