fishで直前に実行したコマンドをコピーする

特定のコマンドを実行した結果をコミットしたいときにコミットメッセージにそのコマンドが記載されていると、あとから見返す時に便利。ただその実行したコマンドをコピーするのにhistoryで履歴呼び出してから先頭に echo つけてパイプ挟んで pbcopy して〜という作業がだるかったのでコマンド一発で終わらせたくて書いた。 sed 使うのがシンプルっぽい。

history | sed -n 1p | pbcopy

fishのhistoryは1行目の方が新しいので1行目だけ出力されたい。なので 1p で1行目を出力する。ただ、そのままだとsedがパイプで受け取った入力を全部垂れ流すので -n で抑制する。ちゃんと面と向かってsedと付き合ったことなかったので学びの取っ掛かりとしてよかった。

ちなみに、以下のように実行する前にコピーする案のもぱっと思いついたのだけれども、実行結果が大丈夫かわからない状態でコピーしても意味ないなと思ってボツにした。

 function copy-command
   echo $argv | pbcopy
   $argv
 end

sedについてもっと調べたくて、DMMのセールで買ったシェルスクリプト基本リファレンスに書いてないかな〜と思ったけど「詳細はオンラインマニュアルを参照してください」で終わっていてはいとなった。