Je voulais créer un C
programme simple pour passer dans mon répertoire de projet. Son contenu est le suivant:
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
Je l'ai compilé avec la commande suivante ( pro.c
c'est son nom de fichier):
gcc pro.c -o /usr/local/bin/pro
Il n'y a eu ni erreur ni avertissement. Mais quand je l'exécute, il ne change pas de répertoire. Pourquoi?
process
c
cd-command
enedil
la source
la source
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? C'est une idée!Réponses:
Votre programme fait exactement ce que vous lui demandez de faire: il change le répertoire de travail pour lui - même à
/home/enedil/projects/algo
. Mais une fois qu'il se ferme, le répertoire de travail du shell est restauré.Je suppose que ce que vous voulez réaliser est de changer le répertoire de travail du processus parent, c'est-à-dire le shell, sans avoir recours à un simple
cd
. Il existe une méthode , mais comme le dit son auteur: ne le faites pas.la source
Le répertoire de travail actuel est local au processus. Donc, ce que vous voulez n'est pas possible.
la source
Vous pouvez également utiliser la
CDPATH
variable d'environnement. Comme expliqué dansman bash
:Ainsi, par exemple, vous pouvez ajouter cette ligne à votre
~/.profile
:Vous pouvez maintenant exécuter à
cd projects
partir de n'importe quel répertoire et passer à~/projects
.la source
Pour ce faire pour le shell, utilisez la
source
commande (aliasée à.
). Il exécutera l'application dans le contexte du shell actuel plutôt que de créer un nouveau contexte de shell. C'est ainsi que vous pouvez également définir des variables d'environnement. Si vous remarquez tous les scripts de démarrage dans/etc/rc.d
ou/etc/init.d
, vous verrez de nombreux scripts inclus par d'autres scripts avec la commandeLe
.
provoque le script/etc/init.d/rcvars
afin que tout ce qu'il change persiste dans l'environnement actuel.la source