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/Main
travaux.
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
Il existe une option Shell cdable_vars
:
cdable_vars
Si cette option est définie, un argument de la commande intégréecd
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
).
Peut-être qu'il vaut mieux utiliser des liens
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 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
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
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
.
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$
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.
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