Bash
Linux
Peco
Linuxコマンド
NIFTYDay 6

pushd と dirs を peco でちょっと便利に使う

More than 1 year has passed since last update.

6 日目担当の @tsubasaogawa です。5 日目は @yk-m さんの「iOS11 / iPhone X 対応をした話」でした。


この記事は以下について書かれています


  • Bash における pushd と dirs の使い方

  • peco を使って両者をちょっと便利に使う tips


解決したいこと


  • 過去に移動したディレクトリへ戻りたい


    • けど打つのが面倒

    • むしろパスの一部を忘れた




解決案: pushd と dirs


各コマンドについて


  • pushd: 基本的には cd と同じ。これに加えて、カレントディレクトリの絶対パスを スタック する

  • dirs: スタックした一覧を表示

popd というコマンドもありますが、今回は使いません。


使い方

$ pushd /var

/var

$ pushd cache/
/var/cache /var

(中略)

$ pushd epel/
/var/cache/yum/x86_64/6/epel /var/cache/yum/x86_64/6 /var/cache/yum/x86_64 /var/cache/yum /var/cache /var

$ pwd
/var/cache/yum/x86_64/6/epel

$ dirs -v
0 /var/cache/yum/x86_64/6/epel
1 /var/cache/yum/x86_64/6
2 /var/cache/yum/x86_64
3 /var/cache/yum
4 /var/cache
5 /var

pushd +[番号] で一気にジャンプできます。

$ pushd +4

/var/cache /var /var/cache/yum/x86_64/6/epel /var/cache/yum/x86_64/6 /var/cache/yum/x86_64 /var/cache/yum

$ pwd
/var/cache

dirs ~ pushd +[番号] するのが地味に面倒です。


peco を使って少しラクに移動する


peco について


  • お馴染みのあの娘です。詳しくは 公式


.bashrc にエイリアスとファンクションを追加


  • pushd へのエイリアス pd


    • 普段の移動はコレ



  • pushd + dirs + peco を使ったファンクション pds


    • 過去のディレクトリに戻りたくなったらコレ




.bashrc

alias pd='pushd'

# 慣例に習うなら関数名は peco-pushd がいいかも
function pds() {
# peco が無ければ何もしない
! which peco >/dev/null 2>&1 && echo 'please install peco' 1>&2 && return 1
# dirs -v の結果を peco でフィルタリングして、キューの番号を取得
local pushd_number=$(dirs -v | peco | perl -anE 'say $F[0]')
# peco が強制終了されたら何もしない
[[ -z $pushd_number ]] && return 1
# 移動
pushd +$pushd_number
return $?
}



実行例

pds.gif


さいごに

明日 7 日目は @esu_eichi さんです。お楽しみに。