133 votes

Comment faire un "alias" pour un long chemin ?

J'ai essayé de créer un "alias" pour un chemin que j'utilise souvent lors de la création de scripts shell. J'ai essayé quelque chose, mais ça a échoué :

myFold="~/Files/Scripts/Main"
cd myFold

bash: cd: myFold: No such file or directory

Comment faire pour que cela fonctionne ?
Cependant, cd ~/Files/Scripts/Main travaux.

138voto

paxdiablo Points 341644

Comme il s'agit d'une variable d'environnement (l'alias a une définition différente en bash ), vous devez l'évaluer avec quelque chose comme :

cd "${myFold}"

ou :

cp "${myFold}/someFile" /somewhere/else

Mais en fait, je trouve plus facile, si vous voulez juste la facilité de passer dans ce répertoire, de créer un réel (dans l'un des bash des fichiers de démarrage comme .bashrc ), ce qui me permet d'économiser des frappes au clavier :

alias myfold='cd ~/Files/Scripts/Main'

Vous pouvez alors simplement utiliser (sans le cd ) :

myfold

Pour se débarrasser de la définition, on utilise unalias . La transcription suivante montre tous de ces derniers en action :

pax> cd ; pwd ; ls -ald footy
/home/pax
drwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footy

pax> footydir=/home/pax/footy ; cd "$footydir" ; pwd
/home/pax/footy

pax> cd ; pwd
/home/pax

pax> alias footy='cd /home/pax/footy' ; footy ; pwd
/home/pax/footy

pax> unalias footy ; footy
bash: footy: command not found

108voto

Benjamin W. Points 19035

Il existe une option shell cdable_vars :

cdable_vars
Si cette option est définie, un argument à la commande cd intégré qui n'est pas un répertoire est supposé être le nom d'une variable dont la valeur est le répertoire à modifier.

Vous pourriez ajouter ceci à votre .bashrc :

shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main

Remarquez que j'ai remplacé le tilde par $HOME ; les guillemets empêchent l'expansion du tilde et Bash se plaindrait qu'il n'y a pas de répertoire ~/Files/Scripts/Main .

Vous pouvez maintenant l'utiliser comme suit :

cd myFold

Non $ requis. C'est là tout l'intérêt, en fait - comme le montrent d'autres réponses, cd "$myFold" fonctionne sans l'option shell. cd myFold fonctionne également si le chemin dans myFold contient des espaces, pas de citation nécessaire.

En général, cela fonctionne même avec l'autocomplétion par tabulation, car l'option _cd fonction dans bash_completion vérifie si cdable_vars est défini - mais toutes les implémentations ne le font pas de la même manière, donc vous devrez peut-être utiliser le code source bash_completion à nouveau dans votre .bashrc (ou éditer /etc/profile pour définir l'option de l'interpréteur de commandes).


D'autres shells ont des options similaires, par exemple Zsh ( cdablevars ).

21voto

Mahmoud Bahnasy Points 179

Il est peut-être préférable d'utiliser des liens

Lien logiciel

Lien symbolique ou logiciel (fichiers ou répertoires, plus flexible et auto-documenté)

#      Source                            Link
ln -s /home/jake/doc/test/2000/something /home/jake/xxx

Lien dur

Hard link (fichiers uniquement, moins flexible et non auto-documenté)

#    Source                            Link
ln /home/jake/doc/test/2000/something /home/jake/xxx

Comment créer un lien vers un répertoire

Indice : Si vous ne voulez pas voir le lien dans votre maison, vous pouvez le faire commencer par un point ; il sera alors caché par défaut et vous pourrez y accéder de la manière suivante

cd ~/.myHiddelLongDirLink

13voto

David W. Points 49436

Tout d'abord, vous devez supprimer les guillemets :

bashboy@host:~$ myFolder=~/Files/Scripts/Main

Les guillemets empêchent le shell d'étendre le tilde à sa signification particulière, qui est d'être votre $HOME répertoire.

Vous pourriez alors utiliser $myFolder un environnement une variable shell :

bashboy@host:~$ cd $myFolder
bashboy@host:~/Files/Scripts/Main$

Pour faire un alias vous devez définir l'alias :

alias myfolder="cd $myFolder"

Vous pouvez alors traiter cela comme une sorte de commande :

bashboy@host:~$ myFolder
bashboy@host:~/Files/Scripts/Main$

13voto

Rodrigo Martins Points 273

Vous pouvez ajouter tous les chemins que vous voulez à la table de hachage de votre bash :

hash -d <CustomName>=<RealPath>

Vous pourrez désormais cd ~<CustomName> . Pour le rendre permanent, ajoutez-le à votre bashrc script.

Notez que cette table de hachage est destinée à fournir un cache pour que bash n'ait pas besoin de rechercher le contenu à chaque fois qu'une commande est exécutée, donc cette table sera vidée lors d'événements qui invalident le cache, par exemple la modification de $PATH .

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