Macだとpbcopyやpbpasteといったコマンドでクリップボードの内容をターミナル上で扱うことができて、これが非常に便利。Windowsでも同じことができないか、ChatGPT-4に聞いたところ非常にうまくいったので、ブログ記事としてまとめさせた。
イントロ
Windows Subsystem for Linux 2(WSL2)は、Windows上でLinuxを動作させることができる強力なツールです。しかし、Macユーザーが利用できる便利なpbcopyとpbpasteコマンドのような、クリップボードに直接アクセスする機能がデフォルトではありません。この記事では、WSL2でこれらのコマンドを模倣する方法を解説します。
Windowsのクリップボードにコピー
WSL2からWindowsのクリップボードにコピーするには、Windows側のclip.exeコマンドを利用します。例えば次のようにします:
echo 'テキスト' | clip.exe
Windowsのクリップボードからペースト
逆に、WindowsのクリップボードからWSL2にペーストするには、powershell.exeを利用します:
powershell.exe -command 'Get-Clipboard'
コマンドを短くする
これらのコマンドは有用ですが、特にペーストの方は長く、打つのが面倒かもしれません。それを解決するために、pbcopyとpbpasteというエイリアスを定義します。
bashの場合
bash シェルを使っている場合、.bashrc ファイルに以下のエイリアスを追加します:
alias pbcopy='clip.exe'
alias pbpaste='powershell.exe -command Get-Clipboard'
そして、ターミナルを再起動するか、以下のコマンドを実行して新しいエイリアスを利用可能にします:
source ~/.bashrc
これで、Macのように pbcopy と pbpaste コマンドを使用することができます。
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
以上の手順で、pbcopyとpbpasteの機能をFish shellで使用できるようになります。新たなシェルセッションでもこれらの関数が使用可能になるよう、手動で定義するのではなく、funcsave コマンドを使って保存することが重要です。
結論
これにより、WSL2でもMacのようにクリップボードを操作することが可能になります。この機能を利用すれば、シェルスクリプトやコマンドラインツールから直接クリップボードにアクセスすることができ、作業の効率を上げることができます。
寸評
これでWSL2でもpbcopyやpbpasteといったコマンドを使えるようになった。pbcopyで一行改行ができるのが少し気になるが……。まぁでもこれは便利だね。
以下、質問した内容。
- Macではpbcoyやpbpasteでクリップボードの内容をターミナルで利用できますが、WindowsのWSL2で同じようなことはできませんか
- いいね。しかし、clip.exeはいいがペーストのほうはコマンドが長すぎる。
- 最高だ。完璧に
- まちがって途中で送信してしまった
- それでは、この素晴らしい方法を、いつでも思い出して使えるように、あるいは他の人もできるように、ブログ記事としてまとめてくれ。
- fishだとどうなる?
今回は記事の方もあまり手直ししていない。