シェルスクリプトで現在のディレクトリを取得する.
シェルスクリプトをバックグラウンド実行した場合のpwdコマンド
先日コードを書いていて初めて気がついたのだが,シェルスクリプトをtmuxでバックグラウンド実行(&をつけて実行)した場合,pwdコマンドで得られるディレクトリがシェルスクリプトの存在するディレクトリと異なること(がある)に気がついた.
正確にどのような挙動をしているかまで調べる時間がないので,それについては追々時間ができたら追記することにして,よりロバストにシェルスクリプトの存在するディレクトリを取得する方法としてdirnameを紹介する.
dirnameを利用したディレクトリ取得
dirnameコマンドはファイルまでのパスを入力するとファイル名を除いたディレクトリを抽出するコマンドで,例えば
dirname /a/b/c/d/test.txt
> /a/b/c/d
のように動作する.これとスクリプトのファイル名を表す$0を組み合わせることで,
currentdir=`dirname $0`
としてスクリプトの存在するディレクトリを抽出できる.これをpwdのかわりに使えばスクリプトの実行場所やtmuxの有無にかかわらずロバストにディレクトリを取得できる.