pecoの新機能が素晴らしい

Kazuho’s Weblog: コマンド一発でソースコード検索&表示できる「peco」改が凄い!

を見て、導入して見ました。
すでにmasterにmergeされていますので、brewで入れている人はupgradeで更新できます。
 
時々ack使って検索して、別terminalで該当ソースの確認するみたいなことやっていましたが、それらがコマンド1個で完結できるようにpecoに機能追加されています。
上記で紹介されている pero というwrapperを見るとわかりやすいです。

#! /bin/sh

exec ack "$@" . | peco --exec 'awk -F : '"'"'{print "+" $2 " " $1}'"'"' | xargs less '

ack の結果を pecoに食わせて、peco側で実行するコマンドを指定(awkでコマンドを生成して less に食わす)することができ、指定したコマンドを実行した後、pecoの検索結果に戻ってくることができます。
素晴らしい!!

余談

ちなみに私は、peco関連はfunctionに集約しているので pe という名前で利用しています。

function pe() {
  ack "$@" . | peco --exec 'awk -F : '"'"'{print "+" $2 " " $1}'"'"' | xargs less -N '
}

exec

元のwrapperとして利用しているexecというコマンド知りませんでした。
以下に詳しく記載されています。
UNIXの部屋 コマンド検索:exec (*BSD/Linux)

forkせずに実行してくれるので省エネなわけですね。
あるコマンドを実行するような wrapper script には良いのですね。
 

functionではどうなの?

結局上記 pe は exec なしで実行しています。
function内部でのPIDは、外と同じになるので

$ echo $$
42155

$ function pid() { echo $$ }
$ pid
42155

exec 付きだと終了してしまうのでは?と思ったのですが、execなしと変わらず利用できます。
とりあえずなしの方が良い気がするので、一旦execなしで利用しています。

See Also

ackからptに乗り換えた - rochefort's blog