Lorsque je tape cd ~foo
, j'aimerais que bash m'emmène vers un répertoire foo
comme raccourci pour taper le chemin complet du répertoire de foo
. et j'aimerais pouvoir cp ~foo/bar.txt ~/bar.txt
copier un fichier du /foo/
répertoire vers le répertoire personnel ... Donc, fondamentalement, je veux quelque chose qui fonctionne exactement comme le ~/
fait, mais où je précise ce que le répertoire doit être. [Je suis sûr que je devrais jfgi, mais je ne sais pas quoi fg]
29
Réponses:
La façon dont j'ai l'habitude de le faire est de créer un répertoire qui contient des liens symboliques vers les répertoires que vous souhaitez utiliser et d'ajouter ce répertoire à votre CDPATH. CDPATH contrôle où
cd
va chercher lorsque vous changez de répertoire, donc si ce répertoire de liens symboliques est dans votre CDPATH, vous pouvezcd
accéder instantanément à l'un des répertoires de liens symboliques :L'inconvénient est bien sûr que cela ne fonctionnera pas s'il y a un répertoire dans votre répertoire actuel nommé "b" - qui a priorité sur le CDPATH
Je n'aime normalement pas les réponses qui disent "vous devez d'abord changer de shell", mais cette fonctionnalité exacte existe dans ZSH , si vous êtes prêt à l'utiliser à la place; cela s'appelle des répertoires nommés . Vous exportez une variable
foo
, et lorsque vous vous y référez,~foo
elle se résout à la valeur de$foo
. Ceci est particulièrement pratique car il fonctionne en plus des commandescd
:la source
Vous pouvez écrire une fonction wrapper pour
cd
et l'appeler "cd" (finalement la fonction appellerabuiltin cd
- en utilisant lebuiltin
mot - clé). Vous pouvez utiliser un préfixe que Bash ne développera pas sur la ligne de commande avant que votre fonction ne le voit et il est peu probable qu'il apparaisse comme caractère initial dans les noms de votre répertoire, peut-être ":". Vous voudriez le rendre plus robuste, mais voici un aperçu simple:la source
avec bash:
~foo
est réservé au répertoire personnel de l'utilisateur foo. Je ne recommanderais pas de créer des utilisateurs uniquement pour cette commodité.Vous pouvez vous rendre la vie plus facile (ou plus difficile) lorsque vous changez de répertoire en définissant la
CDPATH
variable d'environnement (recherchez-la dansbash(1)
).En dehors de cela, la seule façon de penser serait de définir des variables d'environnement pour les répertoires que vous souhaitez abréger.
la source
Les variables Bash peuvent être utilisées pour créer un système de signets. Les variables fonctionneront avec n'importe quelle commande et bash complètera le nom de la variable par tabulation. Dans les versions plus récentes de bash, si un / est ajouté au nom de la variable, le chemin que contient la variable peut également être complété par des tabulations.
Pour la persistance, les déclarations de variables peuvent être conservées dans un fichier provenant de .bashrc. Étant donné que ce fichier est un script bash, il peut contenir des déclarations qui font référence à d'autres variables, telles que
aur="${HOME}/AUR"
, ou qui ne s'exécutent que sur certains hôtesif [[ $HOSTNAME == foo ]]; then bar=baz; fi
, ce qui est utile si vous réutilisez des fichiers de configuration sur plusieurs hôtes et utilisateurs.La fonction bash suivante (à ajouter à .bashrc ou à partir de celle-ci) permet aux signets d'être ajoutés et supprimés du fichier de signets. Il est assez récent et n'est pas garanti sans bogues.
la source
Une façon serait de créer un alias pour cd qui remplace
~c
le chemin voulu. Ou utilisez simplement zsh;)la source
Pour changer de répertoire, vous pouvez utiliser wcd: Whereever Change Directory
Avec ça, ce sera comme
wcd plugin_root
.la source
cd
...J'ai la fonction ci-dessous qui créera un alias à la volée,
Lorsque je veux ajouter un répertoire à mes favoris, je tape simplement
s dirName
. Cela crée un alias commealias dirName="cd /my/current/directory/;pwd"
. donc je peux revenir à ce répertoire en tapant simplementdirName
. J'ai une version qui l'enregistre également dans bash_aliases. Cela fonctionne dans n'importe quel shell.la source