248 votes

Changer le répertoire en cours depuis un script

Est-il possible de changer le répertoire en cours depuis un script ?

Je veux créer un util pour la navigation de répertoire en bash. J’ai créé un script de test qui ressemble à ce qui suit :

Lorsque j’exécute le script de l’interpréteur de commandes bash ne change pas le répertoire en cours. Est-il possible de changer le répertoire courant de la coquille d’un script ?

281voto

Norbert Hartl Points 4509

Lorsque vous démarrez votre script un nouveau processus est créé qui hérite seulement votre environnement. Quand elle se termine, elle se termine. Votre environnement actuel reste qu’il est. Vous pouvez commencer votre skript

Le. évaluera le script dans le contexte actuel, alors elle peut être modifiée

208voto

winden Points 995

Vous avez besoin de convertir votre script à une fonction shell:

#!/bin/bash
#
# this script should not be run directly,
# instead you need to source it from your .bashrc,
# by adding this line:
#   . ~/bin/myprog.sh
#

function myprog() {
  A=$1
  B=$2
  echo "aaa ${A} bbb ${B} ccc"
  cd /proc
}

La raison en est que chaque processus a son propre répertoire en cours, et lors de l'exécution d'un programme à partir de la coquille, il est exécuté dans un nouveau processus. La norme "cd", "pushd" et "popd" sont intégrés à la coque interprète afin qu'ils affectent le processus du shell.

En faisant de votre programme une fonction shell, vous ajoutez votre propre processus de commande, puis le répertoire de changement obtient reflétée dans le processus du shell.

54voto

MergerMan Points 77

Mettre ensemble ce qui précède, vous pouvez créer un alias

Si vous ne voulez pas écrire l’interligne «. » chaque fois que vous voulez à la source de votre script dans l’environnement de shell, ou si simplement vous ne voulez pas n’oubliez pas qui doit être fait pour le script fonctionne correctement.

38voto

huvelbaki Points 237

Si vous utilisez bash, vous pouvez essayer alias :

dans le fichier .bashrc, ajoutez cette ligne :

Lorsque vous écrivez « p » sur la ligne de commande, il va changer le répertoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X