シェルスクリプトでスクリプトのディレクトリの絶対パスを取得する方法
Discussion
概要
シェルスクリプトでスクリプトが置かれている絶対パスを取得し、それを変数に代入して使用する際に、どのようにパスを取得するのが良いのでしょうか?また、皆さんが使っている方法を教えてほしいです。
方法
#!/usr/bin/env bash
script_path=(
"$(dirname "$(realpath "${0}")")"
"$(cd "$(dirname "${0}")"; pwd)"
"$(readlink -f "${0}")"
"$( cd -P "$( dirname "$(readlink -f "${0}")" )" && pwd )"
)
printf "%s\n" "${script_path[@]}"
dirname "$(realpath "${0}")"
自分で考えました。これが一番シンプルな気がするのですがなにか正常に動作しない場合などがあるのでしょうか?
cd "$(dirname "${0}")"; pwd
ネットで検索するとだいたいこれが見つかります。わざわざcd
してpwd
するのって面倒だと思うんですが、なにか利点があるのでしょうか?
readlink -f "${0}"
とあるOSSで使用されていた方法です。どうやらbash
コマンドの引数として実行するとファイル名まで含まれてしまうそうです。
cd -P "$( dirname "$(readlink -f "${0}")" )" && pwd
上記のOSSで現在使用されている方法です。上の方法からファイル名を除外します。
わざわざdirname
で取得してからpwd
する意味がわかりません。