web-dev-qa-db-fra.com

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 puis-je le faire fonctionner?
Toutefois, cd ~/Files/Scripts/Maintravaux.

78
bashboy

Puisqu'il s'agit d'une variable d'environnement (l'alias a une définition différente dans 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 simplement changer de répertoire, de créer un alias réel (dans l’un des fichiers de démarrage bash comme .bashrc), afin que je puisse enregistrer des frappes au clavier:

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

Ensuite, vous pouvez simplement utiliser (sans le cd):

myfold

Pour vous débarrasser de la définition, vous utilisez unalias. La transcription suivante montre tous parmi ceux-ci 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
101
paxdiablo

Il existe une option Shell cdable_vars :

cdable_vars
Si cette option est définie, un argument de la commande intégrée cd qui n'est pas un répertoire est supposé être le nom d'une variable dont la valeur est le répertoire dans lequel il doit être changé.

Vous pouvez ajouter ceci à votre .bashrc:

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

Notez que j'ai remplacé le tilde par $HOME; les guillemets empêchent le développement de tilde et Bash se plaindrait de l’absence de répertoire ~/Files/Scripts/Main.

Maintenant, vous pouvez utiliser ceci comme suit:

cd myFold

Non $ Champs obligatoires. En fait, c'est tout le problème - 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, aucune citation n'est requise.

Cela fonctionne généralement même avec l'auto-complétion par tabulation en tant que _cd fonction dans bash_completion vérifie si cdable_vars est défini - mais chaque implémentation ne le fait pas de la même manière, vous devrez donc peut-être utiliser le code source bash_completion encore dans votre .bashrc (ou éditez /etc/profile pour définir l’option Shell).


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

49
Benjamin W.

Peut-être qu'il vaut mieux utiliser des liens

Lien souple

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

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

Lien dur

Lien physique (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

Astuce : Si vous n'avez pas besoin de voir le lien dans votre maison, vous pouvez le commencer par un point. ; alors il sera caché par défaut alors vous pouvez y accéder comme

cd ~/.myHiddelLongDirLink
8
Mahmoud Bahnasy

Premièrement, vous avez besoin du $ pour accéder à la valeur de "myFold" afin que le code de la question fonctionne:

cd "$myFold"

Pour simplifier cela, créez un alias dans ~/.bashrc:

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

N'oubliez pas de vous procurer le .bashrc une fois pour rendre l'alias disponible dans la session bash en cours:

source ~/.bashrc

Vous pouvez maintenant changer de dossier en utilisant:

cdmain
5
hek2mgl

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

hash -d <CustomName>=<RealPath>

Maintenant vous pourrez cd ~<CustomName>. Pour le rendre permanent, ajoutez-le à votre script bashrc.

Notez que cette table de hachage est censée fournir un cache pour que bash n'ait pas besoin de rechercher du contenu à chaque fois qu'une commande est exécutée. Par conséquent, cette table sera effacée pour les événements qui invalident le cache, par exemple. modifier $PATH.

5
Rodrigo Martins

Tout d'abord, vous devez supprimer les guillemets:

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

Les guillemets empêchent Shell d’étendre le tilde à sa signification particulière d’être votre $HOME répertoire.

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

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

Pour créer un alias, vous devez définir l’alias:

alias myfolder="cd $myFolder"

Vous pouvez alors traiter ce genre de commande comme une commande:

bashboy@Host:~$ myFolder
bashboy@Host:~/Files/Scripts/Main$
5
David W.

Une autre option serait d'utiliser un lien symbolique. c'est à dire:

ln -s ~/Files/Scripts/Main ~/myFold

Ensuite, vous pouvez effectuer des opérations sur ~/myFold, tel que:

cp some_file.txt ~/myFold

qui mettra le fichier dans ~/Files/Scripts/Main. Vous pouvez supprimer le lien symbolique à tout moment avec rm ~/myFold, qui conservera le répertoire d'origine.

4
dvj

mais un alias réel pour un répertoire est également possible, essayez

 myScripts="~/Files/Scripts/Main"
 alias myScripts="cd $myScripts"

De cette façon, vous avez une convention de dénomination commune (pour chaque paire de répertoires/alias), et si vous devez copier quelque chose du répertoire actuel vers myScripts, vous n'avez pas à y penser.

IHTH

2
shellter