wsl2でのpbcopyの代わり

wsl2でのpbcopyの代わり

更新履歴など

  • 2023/3: WSL1.1.3.0くらいから仕様が変わったらしく、clip.exeに渡す前にエンコーディングを変えることが必要になった。
    • 自分の環境だとutf-8からshift-jisに変えないと文字化けしてしまう。
    • 変更にはiconvを使うと良いそうだ。
    • などでiconvが失敗する場合は、iconv -t=sjis//TRANSLITを試してみるべき。

clip.exe

あるのかなと思いつつ調べるとclip.exeというのがあった。ちょっと使った感じ全く同じ動作だと思う。

clip.exeのヘルプメッセージを載せておく:

$ clip.exe /?

CLIP

説明:
    コマンド ライン ツールの出力を Windows クリップボードにリダイレクトします。
    その出力されたテキストをほかのプログラムに貼り付けることができます。

パラメーター一覧:
    /?                  このヘルプを表示します。

例:
    DIR | CLIP          現在のディレクトリ一覧のコピーを Windows クリップボード
                        に貼り付けます。

    CLIP < README.TXT   readme.txt ファイルのテキストのコピーを Windows
                        クリップボードに貼り付けます。

とのことなので、これを使えば:

echo クリップボードにいくよ1  | clip.exe
echo "こっちはencodingを変えるバージョン" | iconv -t=sjis | clip.exe
echo "こちらがエラー時に近似文字に置換するバージョン~" | iconv -t=sjis//TRANSLIT | clip.exe

のようにpbcopyと同じように使える。

iconv -t=sjisを使えば文字化けの対策もできるようだ。さらに//TRANSLITを付与すると、iconv: illegal input sequence at position 69などのエラー時に近い文字に置き換えてくれる。参考サイトは以下:

https://linuxjm.osdn.jp/html/LDP_man-pages/man1/iconv.1.html

エイリアスで使う

頭では分かっていても、手が勝手にpbcopyと打ち始めることが多いので、エイリアスでpbcopyでできるようにした。

# ~/.bachrc

# ...
alias pbcopy='clip.exe'
# iconv使うときはこっち
alias pbcopy='iconv -t=sjis | clip.exe'
# こちらを使うとエラー時に近似文字に置き換える。
alias pbcopy='iconv -t=sjis//TRANSLIT | clip.exe'

これで気軽にpbcopyできる:

echo クリップボードにいくよ2 | pbcopy

wsl2はコマンドにもexeがつくのはなんか嫌な感じがするけど、普通に使えるのでOK。

短いですが以上です。

コメント

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