chdir (< répertoire >) ne ' t changer de répertoire après avoir quitté le shell

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

  • Vous pouvez utiliser un alias à la place – alias proj='cd ~/enedil/projects/algo'
  • @MichaelDurrant oh, vous vouliez dire cd ~/projects/algo? Cest une idée!
  • Cest par conception!

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.

Laisser un commentaire

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