場所に関係なく、他のファイルへのパスを含むスクリプトを使用する方法は?

場所に関係なく、他のファイルへのパスを含むスクリプトを使用する方法は?

別のディレクトリ内に深くネストされた特定のディレクトリにスクリプトが格納されています。

a/long/path/to/the/script.sh

簡単にアクセスできるように、デスクトップからスクリプトへのハードリンクを作成しました。

ただし、スクリプトにプログラムされた他のファイルへのパスは、デスクトップハードリンクを実行しても影響を与えません。

これで、「該当するファイルやディレクトリはありません」というエラーが発生します。

汚れているように見えるので、これらのファイルへの追加のシンボリックリンクを作成したくありません。

どうすればいいのかわかりません。助けてください。

答え1

スクリプトが相対パスを使用してファイルおよび/またはディレクトリを検索する場合、そのファイルおよび/またはディレクトリを見つけるには、現在の作業ディレクトリが正しい必要があります。

コマンドを使用して現在の作業ディレクトリを変更できますcd。ファイルの最初のコマンドが、スクリプトがcd実行されると予想される絶対パスにディレクトリを変更するコマンドである場合、スクリプトの後続のパスは正しいです。

たとえば、

#!/bin/bash

cd /some/path/where/we/expect/to/be || exit 1

# (rest of script here)

これにより、残りのスクリプトが実行される前にディレクトリが変更されます(またはこれが不可能な場合はスクリプトを早く終了します)。

これには、スクリプトを保存するのに便利な場所に配置できるという利点があります。

この問題を解決する別の方法は、スクリプトのすべてのパスを絶対パスに変更することです。

関連情報