pockestrap

Programmer's memo

コマンドの出力結果をコピーするコマンドを作った

TL;DR

欲求

私は普段コマンドラインツールの開発をしていることが多いです。 そのため、コマンドラインツールの出力をコピーしたくなることが多々あります。

例えばコマンドラインツールのバグ報告や機能追加を行う際、コマンドの出力を Issue や Pull-Request に貼り付ける必要があります。

作ったもの

github.com

recc というコマンドを作りました。

Installation

recc は Go で書かれているため、go get コマンドでインストールが可能です。

$ go get github.com/pocke/recc

Usage

例えばls -la の出力をコピーしたい場合、以下のように実行します。

$ recc ls -la
total 32
drwxr-xr-x  3 pocke users 4096 Apr 22 15:05 .
drwxr-xr-x 51 pocke users 4096 Apr 19 08:36 ..
drwxr-xr-x  8 pocke users 4096 Apr 22 15:06 .git
-rw-r--r--  1 pocke users    6 Apr 19 08:37 .gitignore
-rw-r--r--  1 pocke users 1635 Apr 22 15:04 main.go
-rw-r--r--  1 pocke users  909 Apr 22 14:56 option_parser.go
-rw-r--r--  1 pocke users  773 Apr 22 14:56 option_parser_test.go
-rw-r--r--  1 pocke users  673 Apr 22 15:05 README.md

するとls -laの実行結果が表示されますが、これと同時にこの出力がクリップボードにもコピーされています。

pbcopy / xsel などとの違い

世の中にはpbcopyxselなどのソフトウェアが存在し、これらに出力をパイプで流し込むことで、コマンドの出力をコピーすることが可能です。

$ ls -la | xsel --input --clipboard

これらのソフトウェアと recc との違いとして、recc では「実行したコマンド」もコピーする、という点があります。

例えば、recc ls -laとした際にコピーされる文字列は、$ ls -laを含んだ以下のようなものになります。

$ ls -la
total 32
drwxr-xr-x  3 pocke users 4096 Apr 22 15:05 .
drwxr-xr-x 51 pocke users 4096 Apr 19 08:36 ..
drwxr-xr-x  8 pocke users 4096 Apr 22 15:06 .git
-rw-r--r--  1 pocke users    6 Apr 19 08:37 .gitignore
-rw-r--r--  1 pocke users 1635 Apr 22 15:04 main.go
-rw-r--r--  1 pocke users  909 Apr 22 14:56 option_parser.go
-rw-r--r--  1 pocke users  773 Apr 22 14:56 option_parser_test.go
-rw-r--r--  1 pocke users  673 Apr 22 15:05 README.md

このように実行コマンドも含めてコピーを行うことが出来るため、xsel等のソフトウェアよりも、Issue などにコマンドの実行結果を貼り付ける際には有用であると言えるでしょう。