GNU/Linux >> Tutoriels Linux >  >> Linux

Faire référence à un fichier sous le même répertoire qu'un script trouvé dans $path ?

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.


Linux
  1. Exécuter le même script sur plusieurs serveurs via Ssh ?

  2. Rediriger vers le même fichier que le fichier source traité par la commande ?

  3. Enregistrer toutes les sorties du terminal dans un fichier ?

  4. Quel est le but du fichier .bash_profile sous le répertoire d'accueil de l'utilisateur sous Linux

  5. comment trouver le propriétaire d'un fichier ou d'un répertoire en python

Comment connaître le nom du fichier de script dans un script Bash ?

Core dumpé, mais le fichier core n'est pas dans le répertoire courant ?

Comment rediriger stderr et stdout vers différents fichiers dans la même ligne de script ?

'SDL.h aucun fichier ou répertoire de ce type n'a été trouvé' lors de la compilation

Comment puis-je trouver le fichier le plus ancien dans une arborescence de répertoires

Pourquoi le répertoire racine est-il désigné par un signe / ?