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`はどうでしょうか。

```

    ~$ 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
    
```
CC BY-SA 3.0
2016-05-26T07:25:01.023
25194
2016-05-26T07:25:01.023
13199
25189
answer