2010-04-04 7 views
1

Je veux faire un script (à) qui me facilite l'accès aux dossiers.changer le répertoire shell à partir d'un script?

ainsi par exemple. si je tape "to apache", je veux qu'il change le répertoire courant en/etc/apache2. Cependant, lorsque j'utilise la commande "cd" dans le script, il semble que cela change le chemin dans le script, donc le chemin dans le shell n'a pas changé.

comment pourrais-je faire ce travail?

+0

http: // stackoverflow.com/questions/874452/change-current-directory-from-a-script –

Répondre

5

Utilisez un alias ou une fonction, ou sourcez le script au lieu de l'exécuter.

BASH FAQ entry #60.

4

utiliser une fonction

to_apache(){ 
    cd /etc/apache 
} 

mis dans un fichier par exemple mylibrary.sh et chaque fois que vous voulez l'utiliser, la source du fichier. Par exemple

#!/bin/bash 
source /path/mylibrary.sh 
to_apache 
2

Comme l'a dit Ignacio, faites-en une fonction (ou peut-être un alias). La façon dont j'ai tendance à le faire est d'avoir un script shell qui crée la fonction - et le script et la fonction ont le même nom. Puis une fois à un moment donné, je vais chercher le script ('. Funcname') et par la suite je peux simplement utiliser la fonction. J'ai tendance à préférer les fonctions aux alias; il est plus facile de gérer les arguments, etc.

De même, pour le cas spécifique du changement de répertoire, j'utilise CDPATH. Le truc avec l'aide CDPATH est d'avoir l'entrée vide au début:

export CDPATH=:/work4/jleffler:/u/jleffler:/work4/jleffler/src:\ 
/work4/jleffler/src/perl:/work4/jleffler/src/sqltools:/work4/jleffler/lib:\ 
/work4/jleffler/doc:/u/jleffler/mail:/work4/jleffler/work:/work4/jleffler/ids 

Sur cette machine, mon principal répertoire de base est/travail4/jleffler. Je peux accéder à la plupart des sous-répertoires pertinents en une seule fois avec 'cd quel que soit'.

Si vous ne mettez pas d'entrée vide (ou un '.' Explicite), vous ne pouvez pas 'cd' dans un sous-répertoire du répertoire courant, ce qui est déconcertant au moins.

+0

Je n'ai aucun problème avec 'cd' dans un sous-répertoire sans". "dans CDPATH. (Bash 3.2 ou 4.0) –

+0

@Dennis: eh bien, ça pourrait être un morceau de folklore que j'ai récupéré de Korn Shell sur Unix vs bash; c'était très certainement un problème quand j'ai commencé à l'utiliser avec ksh - mais je n'ai pas validé si c'est un problème dans bash (puisque ce que j'ai fonctionne bien dans bash). –

0

Ignacio Vazquez-Abrams a donné un lien vers ce qui répond probablement à la question, même si je ne l'ai pas vraiment suivi. La réponse courte est d'utiliser "source" ou un seul point avant la commande, par exemple: . Mais, j'ai trouvé qu'il y avait des problèmes à ce problème si vous avez un script plus compliqué. Il semble que la variable de nom de fichier script d'origine ($ 0) est perdue. Je vois "-bash" à la place, donc votre script ne peut pas renvoyer un texte d'erreur qui inclurait le nom de fichier complet.

De même, vous ne pouvez pas utiliser la commande "exit", sinon votre shell va quitter (particulièrement déconcertant de ssh).

De plus, la fonction "basename" donne une erreur si vous l'utilisez. Donc, il me semble qu'une fonction pourrait être la seule façon de contourner certains de ces problèmes, comme si vous passiez des paramètres.

Questions connexes