4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pushdとpopdとcurrent directoryの関係を分かりやすく表現する工夫

Last updated at Posted at 2016-03-25

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
4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?