お兄ちゃん!
同じディレクトリを
何度も行き来していると
cd を打つのが
面倒になってくるよ…
それなら
pushd と
popd を使おう!
cd のように
カレントディレクトリを
変更するコマンドだけど
追加の機能があるんだ!
pushd と popd を使う前に
まずは「スタック(stack)」
という言葉を覚えよう!
それはどういう
ものなのかな?
複数の情報を
蓄えておける
構造のことなんだ
スタックは
「積まれたお皿」に
似ているよ
積まれたお皿?
積まれたお皿があって
そこに新しい皿を
追加するとき
みどりはどうするかな?
積まれたお皿の一番上に
新しいお皿を乗せるよ!
じゃあ逆に積まれたお皿から
お皿を一枚取り出すときは
どうしようか?
普通だったら
一番上から
一枚取り出すよね?
このような方法で
お皿を出し入れしていると
下のお皿ほど昔に
積まれたものになるよね
言われてみれば
確かにそうだね
この「積まれたお皿」の
出し入れルールを
「後入れ先出し
(last-in first-out, LIFO)」
と呼ぶよ
そしてその「後入れ先出し」を
持つ構造をスタックというんだ
スタックでは
後に入れたものほど
先に取り出されるんだね!
スタックの操作には
名前が付いているよ
スタックに追加する操作を
「プッシュ(push)」
スタックから取り出す操作を
「ポップ(pop)」
と呼ぶんだ
あれ?
pushd と popd って
もしかして…?
察しがいいね!
pushd は push directory
popd は pop directory
の略なんだ
pushd は
ワーキングディレクトリを
スタックに入れた上で
指定のディレクトリに移動するよ
まずは pwd で
ワーキングディレクトリを
確認しよう!
pwd
ワーキングディレクトリは現在自分がいるディレクトリのことだよね!
/home/midori
次に pushd で/tmp に移動してみよう!
pushd /tmp
うん!やってみるね!
/tmp ~
何かが表示されたよ!たぶんパスかな?
そのとおり!~ はホームディレクトリだったねみどりの場合は /home/midori だよ
この表示は~ がスタックにプッシュされ現在 /tmp にいることをあらわしているよ
最初がワーキングディレクトリで残りがスタックの内容なんだね!
スタックということは何個も積み重ねられるんだよね?もう一回 pushd を使ったらどうなるのかな?
それでは pushd を使って/etc に移動してみよう!どんな表示がされるか想像してから実行してみてね
pushd /etc
こうだとは思うけど…
/etc /tmp ~
予想どおり!一番右側の /etc は現在のディレクトリだよね
残りはスタックの内容で現在は /tmp と ~ の二つのディレクトリが入っているんだね!
popd はpushd でプッシュしたスタックからディレクトリをポップしてそのディレクトリに移動するよ
では popd を実行してみよう!
popd
うん!
/tmp ~
popd の出力はpushd と同じなんだね一番最初がワーキングディレクトリで残りがスタックの内容なんだ!
popd を実行した後で pwd を実行しワーキングディレクトリを確認してみよう!
pwd
やってみる!
/tmp
今は /tmp にいるよ!pushd の出力のとおりだね!
現在スタックには ~ だけが残っているねだからもう一度 popd を実行するとホームディレクトリに戻れるよ!
今回は pushd と popd を学んだよ!ワーキングディレクトリをスタックに保存した上で移動しポップすることでそこへ戻れるんだ!
みどりが最初に悩んでいたように何度も行き来する場合に便利な移動コマンドだよ!
ただディレクトリ移動はcd だけでも十分実用的に使えるよpushd, popd が難しければ急いで覚える必要は無いよ