25193


今現在実行中のスクリプトは、 `$0` であったり `${BASH_SOURCE[0]}` などで取得できるのは理解しています。しかし、これらは
symlink であった場合、 symlink を含んだようなパスになっていることを先ほど確認しました。

質問:

  * 現在実行しているスクリプトに対して、 symlink を解決した本体のありかを取得することはできますか？

背景:

  * シェルスクリプトが利用するリソースファイルを本体の相対パスで指定したく、その際にスクリプト本体のみを symlink した場合にも正しく動作させたいから


CC BY-SA 3.0
2016-05-26T06:43:52.263
25189
2016-05-26T07:25:01.023
754
question
bash ubuntu
現在実行中のスクリプトについて、 symlink を解決したパスを取得する方法はありますか。


ファイルのパスのシンボリックリンクを解決するコマンドとして `readlink`(1) があります。これを利用しましょう。


CC BY-SA 3.0
2016-05-26T07:17:52.410
25193
2016-05-26T07:17:52.410
3061
25189
answer


`realpath`はどうでしょうか。

[code]

    ~$ cat test.sh 
    realpath $0
    ~$ ln -s test.sh lntest.sh
    ~$ file lntest.sh 
    lntest.sh: symbolic link to test.sh
    ~$ ./test.sh 
    /home/xxx/test.sh
    ~$ ./lntest.sh
    /home/xxx/test.sh
    
[/code]


CC BY-SA 3.0
2016-05-26T07:25:01.023
25194
2016-05-26T07:25:01.023
13199
25189
answer