シェルでは $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 # スクリプトのあるディレクトリに移動する