pushdはcdのように指定したディレクトリにcurrent directoryを変更するコマンドですが、pushdする前のディレクトリを記憶していて、pushdの後にpopdすると一個まえのディレクトリに戻れる便利コマンドです。
タスクをシェルスクリプトで自動化するときに、pushdとpopdを組み合わせると便利ですが、シェルスクリプト上で多重pushdをするとcurrent directoryがどこなのか分かりにくくなってしまいます。また、pushdにどのpopdが対応しているかも見えにくくなったりもします。
#!/bin/bash -eux
pushd /var
command
pushd /var/log
command
popd
pwd
command
popd
pwd
current directoryがどこなのか分かりやすくする工夫として、コマンドにインデントをつける方法が考えられます。
#!/bin/bash -eux
pushd /var
command
pushd /var/log
command
popd
pwd
command
popd
pwd
この書き方の難点としては、エディタによっては自動インデントがうまく行かなかったり、IDEによってはインデントがフラットに勝手に直されてしまうことがあるのと、pushdとpopdの対応が他のコマンドに埋もれてしまって認識しにくい点が改善されていないことです。
こういった場合は、Bashの複合コマンド{}
と&&
オペレータを使って書くと、インデントでcurrent directoryが多少把握しやすくなるとともに、pushdとpopdの対応づけも出来て良さそうです。
#!/bin/bash -eux
pushd /var && {
command
pushd /var/log && {
command
} && popd
pwd
command
} && popd
pwd