相対パスで動作するbashスクリプトがあります。スクリプトが保存されているディレクトリと同じ作業ディレクトリが必要です。最初にスクリプトのディレクトリにcdできるため、プロンプトから開始する限り、これは正常に機能します。ただし、/ etc / cron.hourlyにスクリプトへのシンボリックリンクを作成すると、スクリプトが壊れます。
bashスクリプトのディレクトリをスクリプトが保存されているディレクトリに変更する方法が必要です。しかし、これまでのところ失敗しています。スクリプトがcronからシンボリックリンクを介して呼び出された場合でも、これを行う簡単な方法はありますか?
承認された回答:
これができるはずです。
- $ 0パラメータは、呼び出されたスクリプトのフルパス(名前を含む)に展開されます。
- 組み込みのシェル関数test (または [] ) -L を使用して、パスがシンボリックリンクであるかどうかをテストできます
-
ls -l </ code> 、シンボリックリンクに適用すると、最終フィールドとして真のパスを含む1行の出力が得られます。
ソースの場所を見つけるにはこれで十分です。もちろん、それはシンボリックリンクである可能性があり、これを再帰的に実行する必要があります…