このページでは、Mac での「コマンド実行結果をクリップボードにコピーする方法」について解説していきます。逆に、クリップボードにコピーしているテキストをコマンドに入力する方法も説明していきます。
この方法を知っていれば、ターミナルでのコマンド実行結果をクリップボードにコピーしたり、ファイルの中身をクリップボードにコピーしたりすることが出来る様になります。もちろん、クリップボードにコピーされたテキストは、command
+ v
のショートカットキーや右クリックメニューの 貼り付け
からペーストすることも可能になります。
特にコマンドをよく利用する方は覚えておくと便利だと思います!
Contents
コマンド実行結果をクリップボードにコピーする方法
コマンド実行結果のクリップボードへのコピーはパイプ |
と pbcopy
を利用して実現することができます。
具体的には、下記のようにコマンドの後ろ側に | pbcopy
を付加することで、|
の前側で実行されたコマンドの実行結果をテキストとしてクリップボードにコピーすることができます。
% コマンド | pbcopy
例えば、test.txt
というファイルの中のテキストを全てクリップボードにコピーしたい場合、下記のように cat
コマンドを実行してやれば良いです。
% cat test.txt | pbcopy
ページの冒頭でも説明したように、クリップボードにコピーしたテキストは、通常のペースト操作により他のアプリ等に貼り付けすることが可能です。
この方法を知らない場合、例えばファイルの中身のテキストをコピーするためには、まずファイルをテキストエディター等で開き、command
+ a
のショートカットキー等でテキストを全選択し、さらに command
+ c
のショートカットキー等でテキストをコピーする必要があります。
それに対し、この方法を知っていれば、上記の形式のコマンド1つでファイルの中のテキストを全てコピーすることが可能となります。
もちろん、ファイルの中身をコピーするという用途だけでなく、何かしらのコマンドの実行結果をクリップボードにコピーするようなことも可能です。
例えば、下記を実行すれば起動中のプロセスの状態をテキストとしてクリップボードにコピーすることもできますし、
% ps aux | pbcopy
下記を実行すれば現在フォルダのフォルダパスをコピーすることができます。
% pwd | pbcopy
また、下記を実行すれば現在フォルダに存在するファイルのリストをクリップボードにコピーすることもできます。
% ls | pbcopy
| pbcopy
を利用しなかった場合、これらのコマンドの出力結果をクリップボードにコピーしようと思えば、コマンド実行後に出力結果をマウスで選択し、さらに command
+ c
のショートカットキー等でテキストをコピーする必要があります。ですが、上記のように | pbcopy
を利用すれば、コマンド1つでコピーまで行うことが可能です。
コピーしたテキストをコマンドに入力する方法
逆に、クリップボードにコピーしたテキストをコマンドに入力したい場合もあると思います。この場合は下記のように pbpaste |
の後ろ側にコマンドを指定すれば良いです。
% pbpaste | コマンド
例えば、下記を実行すれば、クリップボードにコピーされている英文の全ての小文字を大文字に変換することができます。
% pbpaste | tr 'a-z' 'A-Z'
スポンサーリンク
クリップボードにコピーされる仕組み
方法・手順の説明は以上となります。
最後に、前述のコマンド実行によってクリップボードにコピーが行われる仕組みについて解説しておきます。
標準入力と標準出力
まず、この仕組みを理解するためには標準入力と標準出力について理解しておいてほうが良いです。
簡単に言えば、標準入力とはプログラムやコマンドにあらかじめ用意されているデータの入力経路のことで、標準出力とはプログラムやコマンドにあらかじめ用意されているデータの出力経路のことになります。
ターミナルで実行するコマンドの場合、デフォルトでは標準入力はキーボード、標準出力は画面にそれぞれ接続されています。そのため、標準入力からデータを入力可能なコマンドの場合、ターミナル上でキーボードで文字入力を行うことで、それらの文字をコマンドに対して入力することができます。また、コマンドが実行結果を標準出力に出力した場合は画面に表示されることになります。
ポイントは、標準入力と標準出力はあくまでも経路であり、接続先を変えることで入力元や出力先を変更することが可能となる点になります。これを利用してコマンドの実行結果のコピーを実現します。詳細は後述で解説します。
また、Mac や Linux 等に用意されているコマンドは、実行結果を標準出力に出力するものが多いです。
例えば、前述で紹介した cat
は、引数で指定したファイルの中身をテキストとして標準出力に出力するコマンドになります。また、ls
は現在フォルダ or 引数で指定したフォルダに存在するファイルの名前をテキストとして標準出力に出力するコマンドになります。
pbcopy
と pbpaste
そして、クリップボードへのコピーを行う際に登場した pbcopy
は標準入力から入力された文字列をクリップボードにコピーするコマンドになります。
ですので、pbcopy
を単体で実行し、さらにキーボード入力で文字列を入力し、最後に control
+ d
で pbcopy
を終了させれば、入力した文字列がクリップボードにコピーされることになります。
それに対し、クリップボードからの貼り付けを行う際に登場した pbpaste
は、クリップボードにコピーされているテキストを標準出力にを出力するコマンドになります。
ですので、pbpaste
を単体で実行すれば、クリップボードにコピーされている文字列が画面に表示されることになります。
スポンサーリンク
パイプ |
ここからが本題で、次はいよいよコマンド実行によって標準出力に出力されたテキストがクリップボードにコピーされる仕組みについて解説していきます。
前述の通り、pbcopy
は標準入力に入力されたテキストをクリップボードにコピーするコマンドになります。したがって、コマンドの実行結果を pbcopy
の標準入力に入力さえしてやれば、コマンド実行結果をクリップボードに入力させることが出来ることになります。さらに、前述の通り、コマンドの実行結果は標準出力に出力されるものが多いです。
ここでポイントになるのが、標準出力も標準入力も結局は経路であるという点になります。これらはただの経路であり、この経路がキーボードや画面に接続されているので、入力元がキーボードとなり、出力先が画面となっているだけです。
ですが、前述の通り、これらの経路の接続先は変更することが可能です。したがって、”出力結果をコピーしたいコマンドの標準出力の接続先” を “pbcopy
の標準入力” にしてしまえば、コマンドの実行結果をクリップボードにコピー出来ることになります。
そして、この標準出力を標準入力に接続するために利用する指定子がパイプ |
となります。|
記号は、Mac で日本語キーボードを利用している場合は shift
+ ¥
キーで 入力することができます。
パイプ |
を利用すれば、|
の前側のコマンドの標準出力の接続先が |
の後ろ側のコマンドの標準入力となります(より正確に言えば、標準出力の接続先と標準入力の接続先が同じになる)。
つまり、下記の形式でコマンドを実行した場合、|
の前側のコマンドの標準出力が pbcopy
の標準入力に接続されることになります。
% コマンド | pbcopy
その結果、コマンドの実行結果が標準出力に出力されれば、その実行結果が pbcopy
の標準入力に入力されてクリップボードにコピーされることになります。
逆に、pbpaste
の標準出力を他のコマンドの標準入力に接続してやれば、クリップボードにコピーされているテキストを他のコマンドに入力することも出来ることになります。
つまり、下記のような形式でコマンドを実行すれば、|
の後ろ側のコマンドに対してクリップボードにコピーされているテキストが入力されて実行される様になります。
% pbpaste | コマンド
このように、パイプ |
を利用して特定のコマンドの標準出力と pbcopy
の標準入力とを接続したり、pbpaste
の標準出力と特定のコマンドの標準入力とを接続したりすることで、コマンドとクリップボードを連携して動作させることが可能となります。
今回はクリップボードを中心に話を進めてきましたが、pbcopy
や pbpaste
だけでなく、他のコマンドに関しても、パイプ |
を利用することでコマンド同士を連携して動作させることも可能であり、これによってコマンドで実現可能な処理や動作の幅を一気に広げることができます!
まとめ
このページでは、Mac での「コマンド実行結果をクリップボードにコピーする方法」について解説しました!
下記の形式でコマンドを実行することで、|
の前側のコマンドの実行結果をクリップボードにコピーすることが可能です。
% コマンド | pbcopy
さらに、下記の形式のコマンドを実行すれば、クリップボードにコピーされているテキストを |
の後ろ側のコマンドに入力することができます。
% pbpaste | コマンド
いずれにしても、ポイントになるのは標準入力と標準出力、そしてパイプ |
です。これらをしっかり理解しておけば、コマンドで実現できることの幅が一気に広がります。特にパイプ |
に関しては是非この機会に覚えておいてください!
下記ページではパイプ |
の詳細を解説していますので、もっと詳しく知りたい方は是非読んでみてください!