Je voulais créer un simple programme C
pour passer au répertoire de mon projet. Son contenu est le suivant:
#include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; }
Je lai compilé avec la commande suivante (pro.c
est son nom de fichier):
gcc pro.c -o /usr/local/bin/pro
Il ny a eu aucune erreur ni avertissement. Mais quand je le lance, et non change de répertoire. Pourquoi?
Commentaires
Réponse
Votre programme fait exactement ce que vous lui demandez de faire: il change le répertoire de travail de lui-même en /home/enedil/projects/algo
. Mais une fois sorti, le répertoire de travail de shell « s est restauré.
Je suppose ce que vous voulez à réaliser est de changer le répertoire de travail du processus parent, cest à dire le shell, sans recourir à un simple cd
. Il y a un méthode , mais comme son auteur le dit: ne le faites pas.
Commentaires
- Nitpick, mais le shell ' nest ' t restauré, car il na jamais changé. Le shell est simplement un processus, tout comme le programme. Chaque programme a son propre répertoire de travail '.
- @Patrick, true. Conceptuellement, plus précis serait votre répertoire de travail est restauré, en ce que votre processus est " restauré " (est actif au premier plan).
Réponse
Le répertoire de travail actuel est local pour le processus. Donc, ce que vous voulez nest pas possible.
Réponse
Vous pouvez également utiliser le CDPATH
variable denvironnement. Comme expliqué dans man bash
:
CDPATH The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr".
Ainsi, par exemple, vous pouvez ajouter cette ligne à votre ~/.profile
:
CDPATH=~/projects
Vous pouvez maintenant exécuter cd projects
depuis nimporte quel répertoire et déplacer à ~/projects
.
Answer
Pour faire cela pour le shell, utilisez le Commande source
(alias .
). Il exécutera lapplication dans le contexte du shell actuel plutôt que de créer un nouveau contexte de shell. Cest ainsi que vous pouvez également définir des variables denvironnement. Si vous remarquez tous les scripts de démarrage dans /etc/rc.d
ou /etc/init.d
, vous verrez beaucoup de scripts qui sont inclus par dautres scripts avec la commande
. /etc/init.d/rcvars
Le .
provoque le script /etc/init.d/rcvars
pour que tout il change persiste dans lenvironnement actuel.
Commentaires
- Vous pouvez ' exécuter un programme C de cette façon, seulement un script shell.
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Cest une idée!