知って便利な「pbcopy」と「pbpaste」

海上忍
2011-04-11 12:20:00
  • このエントリーをはてなブックマークに追加
最新特集【一覧】

 Mac OS Xでは、コピー&ペースト用のバッファに「ペーストボード」を使用する。歴史的な経緯から、クリップボードと呼ばれることが一般的だが、ドラッグ&ドロップやサービスを含めシステムに常駐するペーストボードサーバ(/usr/sbin/pboard)がデータの受け渡しを担当する。Cocoa/Carbonをかじった経験があれば、NSPasteboardクラスを耳にしたことがあるはず。そう、接頭辞からわかるとおり、NEXTSTEP以来連綿と利用されている機構なのだ。

 そのペーストボードをハンドリングするコマンドが「pbcopy」と「pbpaste」だ。前者は標準入力から受け取った内容をペーストボードに渡し、後者はペーストボードの内容を標準出力へと書き出す。

 例を示しつつ使い方を解説してみよう。以下のコマンドラインでは、UTF-8エンコードのプレインテキストを標準出力へ書き出し、それをpbcopyが受け取りペーストボードへと転送している。このとき、シフトJISのファイルも処理できるが、日本語EUCでは失敗する。

 その理由は、「__CF_USER_TEXT_ENCODING」の値にある。ログイン時に読み込まれる「~/.CFUserTextEncoding」によって決定されるこの環境変数は、pbcopy/pbpasteコマンドの実行時に参照されて挙動に影響を及ぼす。日本語環境の場合、「~/.CFUserTextEncoding」には「1:14」が設定されているはずで、その結果pbcopy/pbpasteコマンドでも日本語が扱える、という仕組みだ。

$ cat howto.txt | pbcopy

 pbpasteは、一般的なCocoa/Carbonアプリケーションとの連携で力を発揮する。ペーストボードの内容は、オプションを指定することで、プレインテキスト、リッチテキスト、ポストスクリプトのいずれかの形式に変更したうえで出力できるからだ。

 たとえば、ウェブブラウザ上のテキストをワープロ文書にペーストすると、通常の方法ではスタイルまでコピーされてしまい難儀するが、範囲指定とコピー実行後に以下のコマンドラインを実行しておけば、プレインテキストの状態でペーストできる。前述の環境変数が適切であれば、日本語テキストも支障なく扱えるはずだ。

$ pbpaste -Prefer txt | pbcopy
  • 新着記事
  • 特集
  • ブログ