🖥

かんたんなpeco

2023/08/26に公開

今までpeco を使う時は、ネットに落ちてる設定をてきとーに使っていた。
「pecoで色々やりたいけど、どうせ難しいんだろうなあ」と思っていた。

だけど本当に簡単だった。


pecoとは

標準入力を受け取って、選んで、標準出力を返すもの。ただそれだけ。

image.png


選ぶところだけがpeco。

image.png


つまり

あとの受け渡しは自由にすればいい。
標準入力と標準出力を工夫するだけで、色々なことが出来る。


一番簡単な例


改行で区切ったテキストを

$ echo -e "a\nb\nc"
a
b
c

pecoに与えてみると

$ echo -e "a\nb\nc" | peco

選べる!

image.png


選んだテキストが標準出力される。

image.png


これだけ!


あとは好きなことをすれば良い


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)

image.png


ls に渡す例

(シェルの仕様なのでpecoとは直接関係ないが)

ls / ls -la とか、オプションの部分を切り替えて与えられたりもする。

ls $(echo "-la\n" | peco)

使いやすくする

シェルのエイリアス登録したり、ショートカットキーに登録したりすれば良い。


自分で作ってみた

(どこかに同じようなものが落ちてるだろうけど)


問題

pecoを何度も連続的に実行するには?
( pecoで選ぶ => 実行結果 => 別のものをpecoで選ぶ => 実行結果、みたいな)


解答

シェルスクリプトの中でpecoを回せば良い。

some.sh
while true; do
  echo -e "a\nb\nc" | peco
  read Wait
done

作ってみたやつ

業務的にニッチなやつ。

Bigquery | peco で連続してジョブ詳細を見るシェルスクリプト - Qiita

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2017-10-10

Discussion