それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

pbcopy で標準出力の内容をecho表示を維持しつつコピーしたい

pbcopy コマンドはクリップボードのコピーが出来て便利。

pbcopy コマンドを使うと、ターミナルの出力内容をコピーが出来る。便利なコマンド

でも困ったことが有る。クリップボードにコピーされた内容を見れない。

takuya@~$ ls /
Applications  Network  Users    bin    dev  home                       lost+found  net  private  tmp  var
Library       System   Volumes  cores  etc  installer.failurerequests  mnt         opt  sbin     usr
takuya@~$ ls / | pbcopy

コピーされると標準出力には出てこない。pbcopyはパイプから読み取った内容をクリップボードにコピーして、その内容を出力することが出来ない。Cygwinなら

ls | tee >  /dev/clipboard | grep ....

などと、コマンド途中で挟み込むと結構便利だった。

パイプ途中、結果に冪等性がない場合に面倒くさい。

パイプの途中や、出力内容が乱数を含む場合に不便

コマンドの出力内容をクリップボードにいれるときに、何度実行しても同じ結果になるコマンドであれば、全く問題がないのですが。内容が変化する場合に困ります。

どうするか?→ pbpasteを即時に実行する。

実行結果をpbcopy クリップボードにコピーしつつ、画面にも同じものを出力したい場合、pbcopy のオプションでは出力は一切ないので、コマンドの結果を維持するのに困る。

連続して呼びたいときや、あとで使うためにいったんクリップボードにとっておくような手軽な使い方ができない。逐次ファイルに出すのも面倒くさいようね。

alias pbcopy='pbcopy ; pbpaste'

こうしておけば、コピーしつつ標準出力を維持することができて、もっと手軽に使うことが出来る。

次で使うために、コマンドの結果欲しいときにファイルに出さずクリップボードを経由できるようになる。メモ帳にいったん保存しておこうみたいなときや、目で確認できるから便利。

または && で繋いで

alias pbcopy='pbcopy && pbpaste'

パスワードの自動生成で重宝する。

パスワードを自動生成するときに、この考え方が重宝してる。

ユーザー登録時にパスワードを求められても、メアドや住所などもコピーするので画面に一旦出しておおきたいし、クリップボードにもコピーしたい。両方がほしいときにとても便利。

sf-pwgen -a alphanumeric -l 12 -c 1 |pbcopy ;pbpaste

2017/05/30 変更

パイプで渡すと、起動タイミングが若干ずれる。貼り付けがコピーより速く実行されるみたい。なので、 パイプで渡すより、; や && で別々に起動したほうがよさそう

参考資料

man pbcopy