コマンドの出力結果をコピーするコマンドを作った
TL;DR
- GitHub - pocke/recc: Record command and output.
recc ls -la
で、ls -la
が実行され、結果がクリップボードにコピーされる。
欲求
私は普段コマンドラインツールの開発をしていることが多いです。 そのため、コマンドラインツールの出力をコピーしたくなることが多々あります。
例えばコマンドラインツールのバグ報告や機能追加を行う際、コマンドの出力を Issue や Pull-Request に貼り付ける必要があります。
作ったもの
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 などとの違い
世の中にはpbcopy
やxsel
などのソフトウェアが存在し、これらに出力をパイプで流し込むことで、コマンドの出力をコピーすることが可能です。
$ 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 などにコマンドの実行結果を貼り付ける際には有用であると言えるでしょう。