Est-il possible de changer le répertoire courant à partir d'un script?
Je souhaite créer un utilitaire pour la navigation dans les répertoires dans Bash. J'ai créé un script de test qui ressemble à ce qui suit:
#!/bin/bash
cd /home/artemb
Lorsque j'exécute le script à partir du shell Bash, le répertoire actuel ne change pas. Est-il possible du tout de changer le répertoire courant du shell à partir d'un script?
bash
environment
artemb
la source
la source
pushd
(éventuellement redirigé vers>/dev/null
pour supprimer sa sortie) au lieu decd
, vous pouvez revenir plus tard au répertoire précédent avecpopd
.Réponses:
Vous devez convertir votre script en une fonction shell:
La raison en est que chaque processus a son propre répertoire courant, et lorsque vous exécutez un programme à partir du shell, il est exécuté dans un nouveau processus. Les standards "cd", "pushd" et "popd" sont intégrés à l'interpréteur du shell afin qu'ils affectent le processus du shell.
En faisant de votre programme une fonction shell, vous ajoutez votre propre commande in-process, puis tout changement de répertoire est reflété dans le processus shell.
la source
Lorsque vous démarrez votre script, un nouveau processus est créé qui n'hérite que de votre environnement. Quand ça se termine, ça se termine. Votre environnement actuel reste tel quel.
Au lieu de cela, vous pouvez démarrer votre script comme ceci:
Le
.
évaluera le script dans l'environnement actuel, il peut donc être modifiéla source
.sh
extensions sont totalement eww. Ne les utilisez pas.À la lumière de l'illisibilité et de la trop grande complexité des réponses, je pense que c'est ce que le demandeur devrait faire
PATH
. scriptname
Le
.
(point) garantira que le script n'est pas exécuté dans un shell enfant.la source
En réunissant ce qui précède, vous pouvez créer un alias
si vous ne voulez pas écrire le premier "." chaque fois que vous souhaitez générer votre script dans l'environnement shell, ou si vous ne voulez tout simplement pas vous souvenir que cela doit être fait pour que le script fonctionne correctement.
la source
~/.bash_aliases
n'est pas toujours source lors du lancement de Bash.Si vous utilisez bash, vous pouvez essayer alias:
dans le fichier .bashrc ajoutez cette ligne:
lorsque vous écrivez "p" sur la ligne de commande, cela changera de répertoire.
la source
Si vous exécutez un script bash, il fonctionnera sur son environnement actuel ou sur ceux de ses enfants, jamais sur le parent.
Si l'objectif est d'exécuter votre commande: goto.sh / home / test, travaillez alors de manière interactive dans / home / test, une façon consiste à exécuter un sous-shell interactif bash dans votre script:
De cette façon, vous serez dans / home / test jusqu'à ce que vous quittiez (quitter ou Ctrl + C) de ce shell.
la source
Avec pushd, le répertoire courant est poussé sur la pile de répertoires et il est changé dans le répertoire donné, popd récupère le répertoire au-dessus de la pile et le change ensuite.
la source
Allez simplement à
et ajoutez ce code à côté de la dernière ligne:
Puis quittez l'éditeur.
Tapez ensuite:
maintenant vous pouvez utiliser: votre commande dans le terminal
la source
J'ai fait un script pour changer de répertoire. jetez un œil: https://github.com/ygpark/dj
la source
Fondamentalement, nous avons l'habitude
cd..
de revenir de chaque répertoire. J'ai pensé à vous faciliter la tâche en donnant le nombre de répertoires avec lesquels vous devez revenir à la fois. Vous pouvez l'implémenter à l'aide d'un fichier de script distinct à l'aide de la commande alias. Par exemple:code.sh
Après avoir utilisé
source code.sh
dans le shell actuel, vous pouvez utiliser:pour revenir à deux pas du répertoire courant. Expliqué en détail ici . Il est également expliqué là-bas comment mettre le code dans ~ / .bashrc pour que chaque nouveau shell ouvert ait automatiquement cette nouvelle commande d'alias. Vous pouvez ajouter une nouvelle commande pour accéder à des répertoires spécifiques en modifiant le code en ajoutant
if conditions
des arguments plus nombreux et différents. Vous pouvez également extraire le code de git ici .la source
Cette approche est plus simple pour moi.
Supposons que sur un iMac personnel où vous êtes un administrateur, sous le répertoire par défaut lorsqu'une fenêtre de commande est ouverte, / Users / jdoe, ce sera le répertoire où aller: /Users/jdoe/Desktop/Mongo/db.3.2.1 /poubelle.
Voici les étapes qui peuvent faire le travail:
cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin
comme première ligne.chmod 755 mongobin
source mongobin
pwd
Voila!
la source
J'ai également créé un utilitaire appelé goat que vous pouvez utiliser pour une navigation plus facile.
Vous pouvez afficher le code source sur GitHub .
Depuis la v2.3.1, l' aperçu de l' utilisation ressemble à ceci:
la source
J'aime faire la même chose pour différents projets sans déclencher un nouveau shell.
Dans ton cas:
Enregistrez le_script sous:
Puis lancez-le avec:
Ensuite, vous accédez au répertoire en utilisant le même shell.
la source
Ajoutez ci-dessous la ligne cd dans votre shellscript ceci:
la source
Déclarez votre chemin:
la source
Il suffit d'écrire
PWD
et de l'exporter dans votre script, et le changement persistera.la source