pushdとpopd
シェルにpushd
とpopd
というコマンドがあります。
pushd <dirname>
はディレクトリをスタックに入れる、popd <num>
はスタックからディレクトリを取り出してそのディレクトリにcd
するというコマンドです。
ディレクトリ移動が多い場合に便利です。
使い方
カレント・ディレクトリは/tmp/とします。
root@e6ff454b8d0d:/tmp# pwd
/tmp
/opt/ディレクトリをpushd
します。
root@e6ff454b8d0d:/tmp# pushd /opt
/opt /tmp
root@e6ff454b8d0d:/opt# pwd
/opt
すると/opt
ディレクトリに移動し、前カレント・ディレクトリ/tmp
の上にpushされます。
dirs
でスタックを確認することもできます。dirs -v
で連番が表示されます。
root@e6ff454b8d0d:/opt# dirs
/opt /tmp
root@e6ff454b8d0d:/opt# dirs -v
0 /opt
1 /tmp
popd
でスタックからpopして(消して)、前のディレクトリに移動します。
root@e6ff454b8d0d:/opt# popd
/tmp
root@e6ff454b8d0d:/tmp# dirs -v
0 /tmp
たくさんpushd
してpopd
してみる
oot@e6ff454b8d0d:/tmp# pushd /opt/
/opt /tmp
root@e6ff454b8d0d:/opt# pushd /mnt/
/mnt /opt /tmp
root@e6ff454b8d0d:/mnt# pushd /etc/
/etc /mnt /opt /tmp
root@e6ff454b8d0d:/etc# pushd /lib
/lib /etc /mnt /opt /tmp
root@e6ff454b8d0d:/lib# pushd /proc/
/proc /lib /etc /mnt /opt /tmp
root@e6ff454b8d0d:/proc# pushd /dev/
/dev /proc /lib /etc /mnt /opt /tmp
root@e6ff454b8d0d:/dev# pushd /home/
/home /dev /proc /lib /etc /mnt /opt /tmp
root@e6ff454b8d0d:/home# dirs -v
0 /home
1 /dev
2 /proc
3 /lib
4 /etc
5 /mnt
6 /opt
7 /tmp
この時点でカレント・ディレクトリは/home/
です。
ここからpopd
していくと/dev/ -> /proc/ -> /lib/ ...
と移動していくのですが、途中に飛ばしたいディレクトリがある場合はpopd ±num
で消すことができます。
root@e6ff454b8d0d:/home# dirs -v
0 /home
1 /dev
2 /proc
3 /lib
4 /etc
5 /mnt
6 /opt
7 /tmp
# /dev/に移動
root@e6ff454b8d0d:/home# popd
/dev /proc /lib /etc /mnt /opt /tmp
# /proc/に移動
root@e6ff454b8d0d:/dev# popd
/proc /lib /etc /mnt /opt /tmp
# +1で最初から一つ後ろの/libを消す
root@e6ff454b8d0d:/proc# popd +1
/proc /etc /mnt /opt /tmp
# -1で最後尾から一つ前の/optを消す
root@e6ff454b8d0d:/proc# popd -1
/proc /etc /mnt /tmp
# -0で最後尾の/tmpを消す
root@e6ff454b8d0d:/proc# popd -0
/proc /etc /mnt
# +0で最初の/procを消し/etc/に移動
root@e6ff454b8d0d:/proc# popd +0
/etc /mnt
root@e6ff454b8d0d:/etc# pwd
/etc