Comment découvrir, de l'intérieur d'un script bash, le chemin dans lequel se trouve le script
- 1471
- 450
- Emilie Colin
Lorsque vous développez des scripts de bash complexes et commencez à mettre divers scripts dans un dossier, où un script interagit avec un autre, par exemple, en le démarrant, il devient rapidement nécessaire pour nous assurer que nous connaissons le chemin de l'émission, afin que nous puissions commencer le Autres scripts avec un chemin d'accès entièrement qualifié. Ceci est important car le premier script a peut-être été démarré de l'extérieur du répertoire du script. Nous aurions pu aussi le faire en utilisant un chemin relatif, donc même - en quelque sorte - lire la commande qui a commencé le script actuel ne fonctionnera pas.
Dans ce tutoriel, vous apprendrez:
- Ce que
PWD
La commande est, et ce qu'il fait - Comment découvrir de l'intérieur d'un script bash quel chemin ce même script
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Indépendant de la distribution Linux |
Logiciel | Ligne de commande bash, système basé sur Linux |
Autre | Toute utilité qui n'est pas incluse dans le shell bash par défaut peut être installée en utilisant Sudo Apt-Get Install Utility-Name (ou Installation de miam pour les systèmes basés sur Redhat) |
Conventions | # - nécessite que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - exige que les commandes Linux soient exécutées en tant qu'utilisateur régulier non privilégié |
Qu'est-ce que PWD?
Le PWD
La commande dans Linux renvoie le Répertoire de travail de chemin Lorsqu'il est exécuté. Quel que soit le chemin dans lequel nous nous trouvons actuellement et que nous avons précédemment navigué (ou avons été placés par notre système d'exploitation, comme, par exemple, lorsque nous ouvrons une invite de commande / terminal), ce sera le retour lorsque nous exécutons PWD
.
$ CD / $ PWD / $ CD / HOME $ PWD / HOME
Ici, nous avons changé pour le répertoire racine (/ /
) et exécuté PWD
. Notre chemin actuel était le répertoire racine, donc / /
est retourné. Nous avons ensuite changé pour le /maison
répertoire et exécuté PWD
encore. Le chemin retourné est maintenant /maison
.
À l'intérieur d'un script bash, le PWD
La commande fonctionnera de la même manière. Il est également à noter de savoir que depuis un script bash (et sur la ligne de commande en dehors d'un script bash également), nous pouvons utiliser la variable du système d'exploitation spécial $ Pwd
qui sera automatiquement tenu à jour par le système d'exploitation pour contenir notre chemin actuel. Cela nous évite d'avoir à faire quelque chose comme appeler une sous-coquille, je.e. Mypath = "$ (pwd)"
n'est pas nécessaire, nous pouvons simplement invoquer le $ Pwd
variable.
Afin que nous puissions utiliser des personnes handicapées, à droite?
Pas exactement. Imaginez la situation suivante:
$ touch 'mypath.sh '$ echo' #!/ bin / bash '>> mypath.sh $ echo 'echo $ pwd' >> mypath.sh $ chmod + x mypath.shot
Ici, nous avons défini un script nommé mon chemin.shot
et l'a fait exécutable. Ensuite, nous sautons un répertoire de notre répertoire d'origine et exécutons notre script:
$ pwd / home / roel $ cd… $ ./ roel / mypath.sh / home
Tandis que le PWD
commande à l'intérieur de notre mon chemin.shot
Le script fonctionne correctement, il y a un problème ici: PWD
a rendu le chemin dans lequel nous nous trouvons actuellement, à savoir /maison
tandis que le script est réellement stocké dans le / Home / Roel
annuaire!
Rappelez-vous le titre de l'article; Nous recherchons le chemin dans lequel le script est stocké! Alors, comment pouvons-nous trouver cela?
La méthode!
Alors qu'il n'y a pas de variable spéciale dans Bash pour couvrir le chemin dans lequel le script est stocké, il existe une méthode simple pour l'obtenir.
$ cd - / home / roel $ touch 'mypath2.sh '$ echo' #!/ bin / bash '>> mypath2.sh $ echo 'mypath = "$ (cd" $ (dirname \ $ 0) "&& pwd)"' >> mypath2.sh $ echo 'echo "$ mypath"' >> mypath2.sh $ chmod + x mypath2.shot
Ici, nous avons défini un script secondaire nommé mypath2.shot
. Nous y placons un peu de code spécial ($ (cd "$ (dirname \ 0 0)"; && pwd)
) qui trouvera le chemin dans lequel se trouve le script (en changeant dans son répertoire, basé sur le \ 0 0
variable (qui est le nom de script dans la façon dont nous l'avons appelé, je.e. en utilisant un chemin relatif ou entièrement qualifié potentiel) et en demandant le dirname pour lui (par référence, et notez qu'il peut toujours être un chemin relatif si le script a commencé à utiliser un chemin relatif), puis en le transformant (via le CD
) et à demander par la suite le PWD
(Répertoire de travail de chemin) pour le même, nous donnant le chemin entièrement qualifié.
Voyons si cela fonctionne plus correctement que d'utiliser uniquement PWD
:
$ cd… $ pwd / home $ ./ Home / mypath2.sh / home / roel
Le script fonctionne correctement, et même si mypath2.shot
a été relativement appelé, de l'extérieur du répertoire de l'endroit où réside le script, la sortie renvoyée a correctement reflété les informations recherchées; le chemin où le script existe. Nous avons stocké la même chose dans le $ Mypath
variable, et cette variable pourrait désormais être utilisée pour par exemple l'appel $ MyPath / Someotherscript.shot
où un peu de scintillement.shot
est un autre script dans le même répertoire que mypath2.shot
Conclusion
Dans cet article, nous regardons d'abord PWD
Et si cela répondrait au problème à accomplir, à découvrir le chemin dans lequel notre script réside, à tout moment. Alors que PWD
peut fonctionner si nous n'avons pas changé de répertoires, cela ne fonctionnera pas correctement si nous sommes en dehors du chemin dans lequel se trouve le script. Nous avons ensuite introduit un petit morceau de code (Mypath = "$ (cd" $ (dirname \ $ 0) "&& pwd)"
qui renverra toujours le répertoire dans notre script correctement.
Un petit morceau de code, mais une grande solution pour notre problème de codage de script bash! Apprécier
!
Tutoriels Linux connexes:
- Dossier zip dans Linux
- Comment déplacer le dossier sur Linux
- Comment vérifier l'utilisation du disque par dossier sur Linux
- Une introduction à l'automatisation Linux, des outils et des techniques
- Choses à installer sur Ubuntu 20.04
- Comment créer des archives cryptées compressées avec TAR et GPG
- Mint 20: Mieux que Ubuntu et Microsoft Windows?
- Système linux hung? Comment s'échapper vers la ligne de commande et…
- Masterring Bash Script Loops
- Exemples de lignes de commande de commande de bash utile - Partie 4
- « Qu'est-ce que DMESG dans Linux, et comment puis-je l'utiliser?
- Mint 20 mieux que Ubuntu et Microsoft Windows? »