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