それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

source したファイルで自身のファイル名$0を知る

source my_bashrc.sh

bashの設定を読み込むときに、カレントディレクトリを知りたいというか、実行されている自分自身のファイルを知りたい

$0 で取れるだろうと思ったら甘かった。

my_bashrc

#!/bin/bash
echo $0

source してみる。

$source my_bashrc.sh
-bash

あっ、、駄目っぽい。

替わりの環境変数を使う

__FILE__ があればいいんだけど、bashにはないので別の環境変数を探すことに

my_bashrc

ファイルで使える変数をプリントして

#!/bin/bash
declare -p 
printenv

使えそうなものを探す

$source my_bashrc.sh | grep bashrc
declare -a BASH_ARGV=([0]="./my_bashrc.sh")
declare -a BASH_SOURCE=([0]="./my_bashrc.sh")
declare -r SCRIPT_NAME="/Users/takuya/Desktop/my_bashrc.sh"
declare -- _="my_bashrc.sh"

なるほど、この辺が使える。

使ってみた

my_bashrc

#!/bin/bash
echo ${SCRIPT_NAME}
echo $(readlink -f ${BASH_SOURCE[0]})
echo $(readlink -f ${BASH_ARGV[0]} )

行けそう。

$ source my_bashrc.sh 
/Users/takuya/Desktop/my_bashrc
/Users/takuya/Desktop/my_bashrc
/Users/takuya/Desktop/my_bashrc

結論

source されるファイルで、自分自身($0 /  __FILE__  ) を知るためには次を使う。

echo ${SCRIPT_NAME}

参考資料