2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

かんたんなpeco

Last updated at Posted at 2017-10-10
1 / 28

今まで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オープンチャットもご利用ください。

Twitter

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?