bash

Restaurer son répertoire courant lors d’une ouverture de session sous Linux

Je travaille tous les jours sur un serveur Linux. Je me suis rendu compte que chaque matin, lorsque la session de la veille a été coupée, je retape systématiquement la même commande : “cd le/repertoire/vers/mon/projet/actuel”.

Taper ces quelques mots chaque matin n’est pas vraiment la mer à boire, mais c’est en revanche déjà plus pénible de devoir le refaire 15 fois dans la journée, lorsque surviennent des coupures réseaux qui me font perdre ma session…

J’ai décidé ce matin, de trouver une solution simple et légère pour palier le problème.

La solution

L’idée est toute bête : à chaque changement de répertoire, je stocke le nouveau répertoire courant dans un fichier à la racine de mon “home-directory”. À l’ouverture de session, je lis ce fichier s’il existe et change le répertoire courant en conséquence.

Réalisation

La réalisation se divise en deux étapes :

  1. L’écriture de deux scripts simples pour sauvegarder et restaurer le répertoire courant;
  2. la redéfinition de la commande “cd” pour qu’elle exécute les scripts précédents.

Les scripts

J’ai choisi de stocker mes scripts personnels dans un répertoire nommé “bin“, à la racine de mon “home”. Vous pouvez bien évidemment les mettre où bon vous semble.

Le premier script se nomme savepwd.sh, et voici son contenu :

Rien de fou ici : on change le répertoire (on préfixe cd par un antislash pour éviter d’appeler un éventuel alias; ce qui tombe bien puisque c’est ce qu’on va faire dans la deuxième partie) et on inscrit dans le fichier ~/.savedpwd le répertoire courant après changement.

On spécifie $2 pour une raison que nous verrons plus tard.

Le deuxième script se nomme loadpwd.sh et contient les lignes suivantes :

Encore une fois, rien de spécial : on teste l’existence du fichier ~/.savedpwd, et s’il existe, on remplace le répertoire courant par celui qui y est inscrit.

Les alias

Modifions maintenant le script de démarrage de session, dans mon cas il s’agit du fichier ~/.bashrc, et ajoutons les lignes suivantes :

On remplace simplement la commande “cd” par un appel au script ~/bin/savedpwd.sh et on fait un appel à ~/bin/loadpwd.sh lors du premier chargement du script.

Vous vous posez certainement la question, pourquoi ce paramètre “dummy” ? Tout simplement, si on utilisait le premier paramètre ($1) on a un bogue dans le cas où l’appelant a fait un appel à set dans sa console, et quand on appelle cd sans paramètres : en effet, set définit $1 dans la console actuelle, et devient la valeur par défaut quand le script est appelé sans paramètre.

En faisant par exemple :

Au lieu de retourner à la racine du “home-directory”, on se retrouve dans le répertoire “toto“, s’il existe. En ajoutant le paramètre “dummy“, on empêche le problème de se produire en s’assurant qu’aucun paramètre par défaut n’est appelé lors de l’invocation de ~/bin/savepwd.sh.

C’est fini !

Ça y est, vous pouvez relancer votre session pour prendre en compte les modifications : dès que vous changerez de répertoire courant, celui-ci sera sauvé puis restauré lors de la prochaine ouverture de session !

J’espère en tout cas que cette astuce pourra vous servir ! N’hésitez pas à me suggérer des améliorations ou d’éventuels problèmes (sécurité, utilisation) liés à ces scripts. Bon code ! :)

2 réflexions au sujet de « Restaurer son répertoire courant lors d’une ouverture de session sous Linux »

  1. daminetreg

    C’est pas mal, je prends ta solution :), car je tape 15 fois par jour : cd ~/workspace/rric/rccg/src/.

    Et un autre dossier lorsque je suis sur d’autre projet. :) Merci pour l’accéleration de ma productivité.

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">