less than 1 minute read

シェルスクリプトをバックグラウンド実行した場合のpwdコマンド

先日コードを書いていて初めて気がついたのだが,シェルスクリプトをtmuxでバックグラウンド実行(&をつけて実行)した場合,pwdコマンドで得られるディレクトリがシェルスクリプトの存在するディレクトリと異なること(がある)に気がついた.

正確にどのような挙動をしているかまで調べる時間がないので,それについては追々時間ができたら追記することにして,よりロバストにシェルスクリプトの存在するディレクトリを取得する方法としてdirnameを紹介する.

dirnameを利用したディレクトリ取得

dirnameコマンドはファイルまでのパスを入力するとファイル名を除いたディレクトリを抽出するコマンドで,例えば

dirname /a/b/c/d/test.txt
> /a/b/c/d

のように動作する.これとスクリプトのファイル名を表す$0を組み合わせることで,

currentdir=`dirname $0`

としてスクリプトの存在するディレクトリを抽出できる.これをpwdのかわりに使えばよい.