かんたんなpeco
今までpeco を使う時は、ネットに落ちてる設定をてきとーに使っていた。
「pecoで色々やりたいけど、どうせ難しいんだろうなあ」と思っていた。
だけど本当に簡単だった。
pecoとは
標準入力を受け取って、選んで、標準出力を返すもの。ただそれだけ。
選ぶところだけがpeco。
つまり
あとの受け渡しは自由にすればいい。
標準入力と標準出力を工夫するだけで、色々なことが出来る。
一番簡単な例
改行で区切ったテキストを
$ echo -e "a\nb\nc"
a
b
c
pecoに与えてみると
$ echo -e "a\nb\nc" | peco
選べる!
選んだテキストが標準出力される。
これだけ!
あとは好きなことをすれば良い
sed で置換してみる例 (特に意味はない)
echo -e "a\nb\nc" | peco | sed 's/b/Baked Cheese/g'
クリップボードにコピーする例 (Macの場合)
echo -e "a\nb\nc" | peco | pbcopy
自由だ!
問題
だけど、標準入力をパイプで受け取ってくれないコマンドの場合、
どうやってpecoで選んだ結果を渡せば良いんだろう。
シェルがよく分かっていないが、何らかの変数で渡せるんだろうか。
(イメージ)
echo -e "a\nb\nc" | peco | echo $SELECTED
解答
逆にする。
pecoの結果をパイプで他のコマンドに渡すのではなく、
他のコマンドに渡す中身として、サブコマンド内でpecoを使ってやる。
echo に渡す例 (特に意味はない)
pecoのデフォルトの挙動と変わらないが、自分でechoするならこんな感じ。
echo $(echo -e "a\n\b\c" | peco)
最初は不思議に思ったが、シェルの仕様としてサブコマンドの方を先に実行するので、pecoでいったん実行が「止まって」、選べるモードに入るっぽい。(よく出来てる)
ls に渡す例
好きなディレクトリを選ぶ。
ls $(echo -e "./\n../\n/" | peco)
ls に渡す例
(シェルの仕様なのでpecoとは直接関係ないが)
ls
/ ls -la
とか、オプションの部分を切り替えて与えられたりもする。
ls $(echo "-la\n" | peco)
使いやすくする
シェルのエイリアス登録したり、ショートカットキーに登録したりすれば良い。
自分で作ってみた
(どこかに同じようなものが落ちてるだろうけど)
問題
pecoを何度も連続的に実行するには?
( pecoで選ぶ => 実行結果 => 別のものをpecoで選ぶ => 実行結果、みたいな)
解答
シェルスクリプトの中でpecoを回せば良い。
例
while true; do
echo -e "a\nb\nc" | peco
read Wait
done
作ってみたやつ
業務的にニッチなやつ。
Bigquery | peco で連続してジョブ詳細を見るシェルスクリプト - Qiita
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2017-10-10
Discussion