はじめに

Windowsのターミナルで出力されるログを毎回マウスでぐりぐりしながらコピーすることをやっていたので、簡単にクリップボードにコピーできないかを調査した。

環境

1
2
Windows 11 Professional
WSL2 Ubuntu 24.04 LTS

結論

clip.exe にパイプして渡してあげればよい。  

clip.exe を使う

コマンドプロンプト, PowerShell, WSLで利用できる。

使い方は簡単で、下記のように 利用したいコマンド + |  + clip.exe を指定するだけ。  

1
[コマンド] | clip.exe

例えば、 ipconfig を例にやってみる。

WSL2 (Ubuntu24.04 LTS)ではIPを調べるコマンドはifconfigのため、コマンドプロンプトPowerShellで実行する。

1
ipconfig | clip.exe
1
2
3
C:\Users\Test>ipconfig | clip.exe

C:\Users\Test>

適当なエディタを開いてペーストをすると ipconfigの実行結果が確認できる。   また、クリップボードの履歴を利用しているのであれば、「Windows + V」でも確認ができる。  

clip.exeでターミナルに出力した上でコピーする

※WSL2(Linuxのシェル限定の話)

1
ifconfig | clip.exe

1
ifconfig | tee >(clip.exe)

コマンドの動作としては、 ifconfig の出力を tee コマンドに渡し、tee コマンドはその出力を標準出力(ターミナル)に表示する。 >(clip.exe) でプロセス置換を行うことで tee コマンドは出力を clip.exe にパイプしている。

clip.exeでの文字化けについて

WSL2での動作例を記載する。

1
2
echo "日本語" | tee >(clip.exe)
日本語

出力としては、文字化けしていないがクリップボードでは以下のようになった。

1
譌・譛ャ隱・

iconv -t cp932を挟む。

1
echo "日本語" | iconv -t cp932 | clip.exe

※この場合は特に問題なくクリップボードにコピーされている。

cp932 の範囲外の文字だとどうなのか。
日本語 (シフト JIS) - CP932 - 文字コード表 | UIC を参考に範囲外文字を指定してみる。
例えば絵文字とか。 (📝を例にやってみる。)

1
echo "絵文字📝" | iconv -t cp932 | clip.exe
1
iconv: illegal input sequence at position 9

となった。

では、UTF-16とする。

1
echo "絵文字📝 " | iconv -t utf16 | clip.exe

いけてる!↓

1
絵文字📝 

参考

おわりに

インストールのログとか dnf list installed とかで出力した結果とかをクリップボードにコピーするのはかなり手間がかかるのでこれを積極的に使っていきたい。