ずいぶん以前にUbuntu で pbcopy, pbpaste, openというエントリーを書いた。 今回は、Chromebook の Linux と WSL でこの pbcopy と pbpaste および open をする方法を書き留めます。
必要なツールを入れる。
$ sudo apt install wl-clipboard
~/.bashrc に以下を記述する。
alias pbcopy=wl-copy
alias pbpaste=wl-paste
macOS のターミナルでよく使う open コマンドを Chromebook の Terminal でも使いたいを参照。
~/.bashrc に以下を記述する。
alias pbcopy=clip.exe
alias pbpaste="powershell.exe -command 'Get-Clipboard'"
日本語含まない場合は上記で問題ない。 もし、Windowsのシステムロケールを UTF-8 に変更していない場合(たいていそうだと思いますが) 日本語を扱うには、さらに以下の措置が必要。
詳細は「Windows システム ロケールの変更 UTF-8」などで検索。 なぜかマイクロソフトのオフィシャル情報は検索結果に出現しない。 変更してトラブルが発生する可能性があるから、藪蛇とか思っているんだろうな。
今 foo.txt に日本語含んだテキストが入っていたとして:
$ cat foo.txt | nkf -s | pbcopy
もし nkf コマンドがない場合は、 sudo apt install nkf などして入れる。
これで SJIS としてクリップボードにテキストがコピーされる。
クリップボードに入っているこのテキストをWSL側のターミナルに標準出力するには:
$ pbpaste | nkf -w
...
またはそれを bar.txt ファイルに入れたければ:
$ pbpaste | nkf -w > bar.txt
要するに WSL側では、文字エンコーディングを UTF-8 として扱いたいが、クリップボードは SJIS 扱いになっているので、そのギャップを nkf を使って埋める。
nkf の処理を隠蔽するために ~/.bashrc に以下のように記述してしまうのも一つの方法ではある。
alias pbcopy="nkf -s | clip.exe"
alias pbpaste="powershell.exe -command 'Get-Clipboard' | nkf -w"
しかし、UTF-8 のテキストを SJIS に変換したり、その逆をするときに文字化けが発生する可能性もあるので、 絶対文字化け起こしたくないようなクリティカルな場合(DTP業務とか)は、nkf 処理を隠蔽してしまうと、 事故を起こすことになりかねない。その場合は、この方法は使いたくない。