意外と使えるけれどみんなあまり知らないlinuxコマンドテクニックです
TL;DR
cd -
で直前にいたディレクトリにいけるpopd
でディレクトリスタックに溜まっているディレクトリを移動できるdirs
でディレクトリスタックを参照pushd
でディレクトリスタッにカレントディレクトリをいれられる
cd -
普段ディレクトリを移動する際は cd
を使いますが,引数として-
を与えてあげると違った挙動をします.
例えば最初にルートディレクトリに移動,次にホームディレクトリ以下のsadboxに移動してみます
/ ❯❯❯ cd / / ❯❯❯ ls Applications Volumes home sbin Library bin installer.failurerequests tmp Network cores net usr System dev opt var Users etc private / ❯❯❯ cd ~/.sandbox ~/.sandbox ❯❯❯ ls 1.aux 1.out Gemfile missfont.log 1.dvi 1.pdf Gemfile.lock naltoma.txt 1.fdb_latexmk 1.synctex.gz a.out prezto-fasd-cache.501.zsh 1.fls 1.tex hoge.c texrepo 1.log 1.toc hoge.rb vendor ~/.sandbox ❯❯❯ pwd /Users/anatofuz/.sandbox ~/.sandbox ❯❯❯ cd - / / ❯❯❯ pwd / / ❯❯❯ cd - ~/.sandbox ~/.sandbox ❯❯❯ pwd /Users/anatofuz/.sandbox
こういった用に cd -
を使うと直前のディレクトリを行き来する事が可能です.
dirs
ディレクトリを移動する際に,現在いるカレントディレクトリがディレクトリスタックというスタックに保存されます. スタックとはFirst In Last Out(FILO)とも呼ばれ,つまり最初に入ったやつが最後に出てくるデータ構造です.
例えばディレクトリスタックが次のようになっている場合
❯ dirs [20:14:04] ~ ~/.sandbox ~/workspace/github ~/workspace
これは最初に ~/workspace
にcdし,次に ~/workspace/github
にcdを行い, 続いて ~/.sandbox
にcdした後に最後にホームディレクトリに移動したことを表しています.一番左が現在のカレントディレクトリで,時系列的に右に進むと良いということがわかります.
例えば
anatofuz@anatofuz ~/.sandbox ❯ cd [20:18:55] anatofuz@anatofuz ~ ❯ dirs [20:18:56] ~ ~/.sandbox ~/workspace/github ~/workspace anatofuz@anatofuz ~ ❯ cd workspace/bitbucket [20:19:03] anatofuz@anatofuz ~/w/bitbucket ❯ dirs [20:19:04] ~/workspace/bitbucket ~ ~/.sandbox ~/workspace/github ~/workspace
この用に移動するとカレントディレクトリがディレクトリスタックに詰まっていきます. これはvオプションを付けるとよりわかりやすくなるかと思います.
❯ dirs -v [20:13:10] 0 ~ 1 ~/.sandbox 2 ~/workspace/github 3 ~/workspace
これで言うところの0が現在のカレントディレクトリ.3が最初にcdした先ですね.
popd
このディレクトリスタックをpopつまり一番最近のものを取り出していくのがpopd
コマンドです.
先程の状況で検証してみると
❯ pwd [20:23:37] /Users/anatofuz anatofuz@anatofuz ~ ❯ popd [20:23:38] anatofuz@anatofuz ~/.sandbox ❯ pwd [20:23:39] /Users/anatofuz/.sandbox anatofuz@anatofuz ~/.sandbox ❯ popd [20:23:40] anatofuz@anatofuz ~/w/github ❯ pwd [20:23:41] /Users/anatofuz/workspace/github
この用に順にディレクトリが移動していっています.
なお + 2
などつけるとその分ディレクトリが消されます
pushd
pushdはその逆で,カレントディレクトリをディレクトリスタックに積み上げます
zshなら
zshならオプションで設定する必要がありますが, cd -
でタブを押すことで
ディレクトリスタックが可視化され,簡単にcdする事ができます.
❯ dirs [20:02:51] ~ ~/.sandbox ~/workspace/github ~/workspace anatofuz@anatofuz ~ ❯ cd -0/ [20:02:51] -- directory stack -- 0 -- ~/workspace 1 -- ~/workspace/github 2 -- ~/.sandbox