質問: `hoge.sh`は同階層にある`hoge.py`を内部で実行しています。 現状、`./path/to/hoge.sh` での実行時は成功しますが、 シンボリックリンク`hoge` での実行時には失敗してしまいます。 ``` 【ディレクトリ構造】 /home/User/repos/hoge/hoge.sh hoge.py /home/User/bin/hoge # hoge.sh のシンボリックリンク ``` ``` 【問題のコード】 cd $(dirname $0) ... DATA=`python hoge.py` echo $DATA ... ``` ``` 【実行結果】 $ ./path/to/hoge.sh いい感じの出力 $ hoge python: can't open file 'hoge.py': [Errno 2] No such file or directory ``` 恐らく`cd $(dirname $0)`時に移動している階層がシンボリックリンク時に`/home/User/bin`となっているせいだと考えられます。 ただ、これに対する解決策が思いつきません。 そもそも実行したいshファイルのシンボリックリンクを`bin`配下に作成するのはナンセンスなのでしょうか...?
回答: シンボリックリンクを解決する`realpath`というコマンドがありますので(man)、この結果を`dirname`に投げれば、シンボリックリンクから実行しても元ファイルのパスに移動できます。 ``` fullpath=$(realpath $0) cd $(dirname $fullpath) ```