J'ai un fichier de script bash, qui est placé dans un répertoire ajouté à $PATH afin que je puisse appeler le script depuis n'importe quel répertoire.
Il existe un autre fichier texte dans le même répertoire que le script. Je me demande comment faire référence au fichier texte dans le script ?
Par exemple, si le script ne sert qu'à afficher le contenu du fichier texte, cat textfile
ne fonctionnera pas, car lors de l'appel du script à partir d'un répertoire différent, le fichier texte n'est pas trouvé.
Réponse acceptée :
Ceux-ci devraient fonctionner de la même manière, tant qu'il n'y a pas de liens symboliques (dans l'expansion du chemin ou le script lui-même) :
-
MYDIR="$(dirname "$(realpath "$0")")"
-
MYDIR="$(dirname "$(which "$0")")"
-
Une version en deux étapes de l'un des éléments ci-dessus :
MYSELF="$(realpath "$0")"
MYDIR="${MYSELF%/*}"
S'il y a un lien symbolique sur le chemin de votre script, alors which
fournira une réponse n'incluant pas la résolution de ce lien. Si realpath
n'est pas installé par défaut sur votre système, vous pouvez le trouver ici.
[MODIFIER] : Comme il semble que realpath
n'a aucun avantage sur readlink -f
suggéré par Caleb, il est probablement préférable d'utiliser ce dernier. Mes tests de synchronisation indiquent qu'il est en fait plus rapide.