実行中スクリプトのフォルダを取得する方法をググるとよく紹介されてるのが

dirname $0

これを使って cd したり コマンドに渡す引数の指定でフォルダ名として使ったり

cd `dirname $0`

command `dirname $0`/filename

スクリプトを実行したときのカレントフォルダがどこでも動くようにできる

だけどこれをそのまま使うと動かなかった

dirname というのは引数のパスのファイルやフォルダを含む親フォルダ名を取得するもの
$0 はコマンドライン引数

bash foo.sh
./foo.sh

みたいに実行すると $0 は 「foo.sh」 や 「./foo.sh」
これの dirname は 「.」
カレントフォルダを移動して戻ってくるのには使えない
変更先で 「.」 を使ってもその変更先を自身を表して元のフォルダにはならない

例えば

scriptdir=`dirname $0`

cd $scriptdir

command1
command2

...

cd /path/to/other/dir

command3
command4

...

cd $scriptdir

command5

みたいにしても最初と最後の cd で同じフォルダに移動しない
「.」 になってると cd での移動先が今いるフォルダだから何もしないのと一緒

最初に絶対パスに変換して保持する必要がある