はじめに
Windowsのターミナルで出力されるログを毎回マウスでぐりぐりしながらコピーすることをやっていたので、簡単にクリップボードにコピーできないかを調査した。
環境
Windows 11 Professional
WSL2 Ubuntu 24.04 LTS
結論
clip.exe
にパイプして渡してあげればよい。
clip.exe を使う
コマンドプロンプト
, PowerShell
, WSL
で利用できる。
使い方は簡単で、下記のように 利用したいコマンド
+ |
+ clip.exe
を指定するだけ。
[コマンド] | clip.exe
例えば、 ipconfig
を例にやってみる。
WSL2 (Ubuntu24.04 LTS)
ではIPを調べるコマンドはifconfig
のため、コマンドプロンプト
か PowerShell
で実行する。
ipconfig | clip.exe
C:\Users\Test>ipconfig | clip.exe
C:\Users\Test>
適当なエディタを開いてペーストをすると ipconfig
の実行結果が確認できる。
また、クリップボードの履歴を利用しているのであれば、「Windows + V」でも確認ができる。
clip.exeでターミナルに出力した上でコピーする
※WSL2(Linuxのシェル限定の話)
ifconfig | clip.exe
↓
ifconfig | tee >(clip.exe)
コマンドの動作としては、
ifconfig の出力を tee コマンドに渡し、tee コマンドはその出力を標準出力(ターミナル)に表示する。
>(clip.exe)
でプロセス置換を行うことで tee
コマンドは出力を clip.exe
にパイプしている。
clip.exeでの文字化けについて
WSL2での動作例を記載する。
echo "日本語" | tee >(clip.exe)
日本語
出力としては、文字化けしていないがクリップボードでは以下のようになった。
譌・譛ャ隱・
iconv -t cp932
を挟む。
echo "日本語" | iconv -t cp932 | clip.exe
※この場合は特に問題なくクリップボードにコピーされている。
cp932
の範囲外の文字だとどうなのか。
日本語 (シフト JIS) - CP932 - 文字コード表 | UIC を参考に範囲外文字を指定してみる。
例えば絵文字とか。 (📝を例にやってみる。)
echo "絵文字📝" | iconv -t cp932 | clip.exe
iconv: illegal input sequence at position 9
となった。
では、UTF-16
とする。
echo "絵文字📝 " | iconv -t utf16 | clip.exe
いけてる!↓
絵文字📝
参考
clip | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/clipMicrosoftの中の人直伝! 「clip.exe」を覚えるとコマンドラインやWSLで便利だぞ
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1612972.htmlLinuxでのプロセス置換
https://qiita.com/angel_p_57/items/fd1d9a10e2f4aba17669clip.exeにUTF-8のテキストを渡すと文字化けするようになったので、代替ツールを作った
https://xn--kst.jp/blog/2023/04/13/uclip/WSLの環境からWindowsにclip.exeするときの文字化け対処
https://qiita.com/suzuki-navi/items/f340c69ccada84a3ece3WSLのコマンド実行結果をクリップボードにコピーするなら clip.exe を工夫して使おう!
https://qiita.com/tawara_/items/0916eaec6ad09fce86a5日本語 (シフト JIS) - CP932 - 文字コード表 | UIC
https://uic.jp/charset/show/cp932/
おわりに
インストールのログとか dnf list installed
とかで出力した結果とかをクリップボードにコピーするのはかなり手間がかかるのでこれを積極的に使っていきたい。