私たちの開発サーバーでホストされているSVNのためのpost-commitフックを書いています。私の目標は、コミットされたプロジェクトのコピーを、サーバー上でホストされているディレクトリに自動的にチェックアウトすることです。ただし、プロジェクトがホストされているのと同じサブディレクトリにチェックアウトするには、スクリプトに渡されたディレクトリ文字列の最後のディレクトリのみを読み取ることができる必要があります。
たとえば、SVNをプロジェクト "example"にコミットすると、私のスクリプトは最初の引数として "/ usr/local/svn/repos/example"を取得します。 "/ server/root/example"にチェックアウトしてすぐに変更が反映されるように、文字列の終わりから "example"を取り出して別の文字列と連結する必要があります。
basename
はパスのディレクトリプレフィックスを削除します。
$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
Bashは外部のbasename
を呼び出さなくてもパスの最後の部分を取得できます。
subdir="/path/to/whatever/${1##*/}"
パス名の任意のパスを取得するには、次の方法を使用できます。
pathname=a/b/c
echo $(basename $pathname)
echo $(basename $(dirname $pathname))
echo $(basename $(dirname $(dirname $pathname)))
出力:
c
b
a