3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(Linux)パスを含む変数をdirname,basenameしてコマンドに渡したい

((Linux)シェルスクリプトで自身の絶対パスを取得したいも似たような記事になってます。)

例えば下記のようなシェルスクリプトがあるとします。

BKFILE="/var/bkup/user.tgz"

BKSRC="/home/hoge/"

BKSRC_UP=`dirname ${BKSRC}`

BKSRC_NAME=`basename ${BKSRC}`

cd $BKSRC_UP

tar vzcf $BKFILE $BKSRC_NAME

相対パスでtarを使ってバックアップするスクリプトですが、/home/hoge/ の上のフォルダをバックアップしたいのに、いちいち一時変数(BKSRC_NAME)に入れてから tar コマンドにかけないといけません。

また、相対パスでtarを使いたいわけですが、チェンジディレクトリするためにまた一時変数に入れないといけません。

で、ググルと内気でシャイな相対男子、dirnameで絶対男子になるの巻 - i am voidに参考になる情報が。。

$()を使うと一時変数にいちいち入れなくてもいいようです。

ということで、上記スクリプトを書きなおしたのが下記です。

BKFILE="/var/bkup/user.tgz"

BKSRC="/home/hoge/"

cd $(dirname ${BKSRC})

tar vzcf $BKFILE $(basename $BKSRC)

参考:

シェルスクリプトにおける相対パスから絶対パスへの変換 LAMP Tips