シェルでは $0 で実行したスクリプトファイルのパスが取れる。ここでスクリプトのファイル名やスクリプトのあるディレクトリパスを切り出したときはどうすればよいか。basename というコマンドを使うとファイル名切り出せる。ただ bash だとパターンマッチ抽出たどコマンドに頼らずできる。
スクリプトのファイル名#
1
2
3
4
5
6
7
|
#!/bin/bash
basefilename=${0##*/}
echo $basefilename
basefilenamewithoutext ${basefilename%%.*} # 拡張子を除く
echo $basefilenamewithoutext
|
## は先頭の最長マッチ部分を削除する
%% は末尾の最長マッチ部分を削除する
スクリプトのディレクトリパス#
1
2
3
4
5
6
|
#!/bin/bash
basedir=${0%/*}
echo $basedir
cd $basedir # スクリプトのあるディレクトリに移動する
|
% は末尾の最短マッチ部分を削除する
/foo.sh だと空文字列になってしまうのでがルートに置かれるスクリプトには使えない