curluneの日記

日々試行錯誤。雑多に、気ままに、てきとーに。HoloLens/Oculus Rift,Touchと戯れる日々。

マイナーだけど便利なpushd/popdコマンド ひとりぷちアドベントカレンダー2017 01日目

日々の思いつきの内容で ぷちアドベントカレンダー をやってみようというやつです。 中身は軽く雑多に、なにかしらアウトプットしよう、ということで。

マイナーだけど便利なpushd/popdコマンド

今回はCUI環境bashのコマンド、pushdpopdのお話です。

ざっくり行ってしまうと、便利なcdです。

通常のcd

通常のcdは場所を指定して移動します。

pwd
# /tmp/adv01
mkdir -p path/to/dir
cd path/to/dir
# /tmp/adv01/path/to/dir

場所の代わりに-を指定すると移動前にいた場所へ戻ります。

cd -
# /tmp/adv01

もう一度実cd -を実行すると、同じように移動前にいた場所へ戻ります。

cd -
# /tmp/adv01/path/to/dir

この動作は、以前の場所を記録して、移動の毎に上書きすることで実現されています。

echo $OLDPWD
# /tmp/adv01

上書きしてしまうため、2回移動するとスタート地点の情報は失われてしまいます。

複数回分記録してくれるpushd/popd

pushdpopdは複数回の移動を順番に記録してくれるcdのようなものです。

移動する時はpushd、戻る時はpopdを使います。

cd /tmp/adv01
# /tmp/adv01
pushd path/to
# /tmp/adv01/path/to
pushd dir
# /tmp/adv01/path/to/dir
popd
# /tmp/adv01/path/to
popd
# /tmp/adv01

地味な違いですが、何かと便利な機能です。

作業範囲のトップへ移動してからpushdpopdを活用する事で、親ディレクトリへの../../を軽減する事ができます。 子ディレクトリから親へ辿るよりも、親から子へ補完入力するほうが楽な場合が多い気がします。

ほぼ移動しない場合はcd -でも大丈夫ですが、うっかり複数移動しても戻れる安心感は良いものです。

また、とても環境依存な話ではありますが、複数人でアカウント共有する場合に便利な場合があります。 他の人が使わないためbashのヒストリーから利用しやすいのです。 ヒストリー周りについてはまた別の機会に。

おわりに

今回のpushdpopdは特定のバイナリではなく、bashの内蔵コマンドです。 そのためbinディレクトリをあさっても出てこない、という辺りがマイナーさをより強くしている気がします。

今回のコマンドを含め、内蔵のコマンドには割と便利なものが埋もれています。たまにはマニュアルを眺めると良い事があるかと思います。

Man page of BASH_BUILTINS

bash小ネタ集になる予感......。