bashでスクリプトを作るとき、スクリプト内のリダイレクト先を下記のように指定すると
そのスクリプトがあるディレクトリにファイルが作成される。
echo "test" > test
しかし、cronでそのスクリプトを実行するとtestファイルは、
rootディレクトリに作成されてしまう。
これに気が付くまで
そのため、cronを実施する場合、リダイレクトしたいディレクトリのパスを毎回記載する必要があった。
echo "test" > 対象ディレクトリ/test
パスが長ければ長いほど手間がかかるため、楽が出来ないかと探したところdirnameコマンドを知った。
dirnameコマンドはファイルが設置されている、パスを取得を取得できるコマンド。
dirname /etc/fail2ban
/etc
また、$0 は実行スクリプトを取得できる。それとpwdとサブシェルを合わせると絶対パスを取得できる。
BASE_DIR=$(cd $(dirname $0); pwd)
echo "test" > ${BASE_DIR}/test
上記を用いるとcronからスクリプトを実行しても、
実行スクリプトと同じ階層からリダイレクトしたファイルを取得できた。
参考
[bash] 実行スクリプトの絶対パスの取得
https://qiita.com/koara-local/items/2d67c0964188bba39e29