コンテンツへスキップ

dirnameコマンドで現在のディレクトリを取得する

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です