Licence CC BY-SA

La variable CDPATH dans votre shell

CDPATH, une variable qui peut vous faciliter la vie

Récemment j’ai découvert la variable shell CDPATH.

Usuellement lorsque l’on utilise la commande cd c’est pour changer de répertoire par rapport au répertoire courant.

Il existe bien des raccourcis pour se rendre rapidement dans son home, avec cd ~ (équivalant à cd $HOME) ou encore pour se rendre rapidement dans le répertoire précédent avec cd - (équivalant à cd $OLDDIR).

La variable CDPATH permet d’étendre le champ de déplacement à d’autre répertoires.

Faisons un exemple.

Par défaut la variable CDPATH est vide.

$ echo $CDPATH

Imaginons que je sois un développeur Go et que j’utilise un workspace qui est $HOME/prg/go ($GOPATH=$HOME/prg/go). Les projets que je développe en Go seront dans le répertoire $HOME/prg/go/src/github.com/keftcha.

Il n’y a pas d’obligation de savoir ou de comprendre comment fonctionnent les worksapce de Go. Si vous voulez en savoir plus je vous invite à lire ceci.

Mes projets se situent donc dans le répertoire $HOME/prg/go/src/github.com/keftcha. Ce chemin est plutôt long. Pour pouvoir m’y rendre rapidement je peux créé un alias de la sorte:

alias projects="cd $HOME/prg/go/src/github.com/keftcha"

Cependant faire un alias ne nous permet pas d’aller directement dans le répertoire d’un projet. Pour pallier ce problème on peut faire le choix d’utiliser une variable.

export $PROJECTS="$HOME/prg/go/src/github.com/keftcha"

Avec cette méthode, je peux me déplacer directement dans un projet.

$ cd $PROJECTS/super_projet

Cette méthode a l’inconvénient de devoir toujours commencer par le nom de notre variable.
C’est maintenant que la variable CDPATH entre en scène !

Je définis la variable comme étant le répertoire de mes projets.

export CDPATH="~/prg/go/src/github.com/keftcha"

À présent, en étant dans mon répertoire home, je peux directement me rendre dans mon super projet.

$ pwd
/home/keftcha
$ cd super_projet
~/prg/go/src/github.com/keftcha/super_projet
$ pwd 
~/prg/go/src/github.com/keftcha/super_projet

Comme on peut le voir, lorsque je souhaite changer de répertoire, la commande cd cherche dans un premier temps si le répertoire se trouve dans le répertoire courant puis ensuite s’il n’est pas trouvé dans les répertoires spécifié par la variable CDPATH.

Tout comme la variable PATH, CDPATH peut avoir plusieurs répertoires.
Ex: CDPATH="~/prg/python:~/prg/go/src/github.com/keftcha"



Le shell utilise le répertoire courant comme étant le répertoire de base pour tous les chemins relatifs. En utilisant la variable CDPATH nous pouvons utiliser d’autre répertoire comme étant une base relative.

1 commentaire

Billet sympa. Pour répondre au même soucis j’ai l’habitude de créer des liens symboliques dans $HOME vers les dossiers de mes projets en cours. Souvent, je n’ai qu’un lien qui s’appelle curr.

Si je me mettais à utiliser $CDPATH je pense que je passerais à des noms de projet du genre 001_projet. Ça permet d’éviter les pro<TAB><TAB> qui ne fonctionnent pas parce qu’un vieux projet pas touché depuis des mois et qui commence aussi par pro est au même endroit.

Certains utilisent d’ailleurs cette notation pour tout, en considérant par exemple un dossier de vacances comme un projet. Ça évite d’avoir à choisir si le dossier d’un évènement doit appartenir à Documents, Photos ou Vidéos (en supposant qu’il contient un peu de tout).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte