シェルスクリプトでファイル名を取得するには、 $0 特殊変数を使います。
#!/usr/bin/env bash echo パス名 echo $0
です。
やってみます
# cd /home/takuya/repos/bin # ./test パス名 ./test
パスが通ってる場合はフルパスが帰ります。
# export PATH=$PATH:/home/takuya/repos/bin # test パス名 /home/takuya/repos/bin/test
リンク先で実行したら、
さて、ココからが本題。
上記のファイルをリンク先で実行したらどうなるのか?
# ln -s /home/takuya/repos/bin/test /usr/local/bin # export PATH=$PATH:/usr/local/bin # test パス名 /usr/local/bin/test
リンクファイル名が返ってくる
リンク元のファイルが実行されてるが、リンクしたファイル名として解釈されているようだ
正しいといえば正しいし、正しくないといえば正しくない。
常に、リンク元の元ファイル名を取得するにはどうするのか
realpathを使います
#!/usr/bin/env bash echo パス名 echo $(realpath $0 )
realpath コマンドは、リンク先ファイルが引数指定された、リンク元のファイルを返してくれます。なのでコレで一件落着