Ik wilde een eenvoudig C programma maken om naar mijn projectdirectory te gaan. De inhoud is als volgt: 
#include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; } 
 Ik heb het gecompileerd met het volgende commando (pro.c is de bestandsnaam): 
gcc pro.c -o /usr/local/bin/pro 
Er waren geen fouten of waarschuwingen. Maar als ik het start, verandert het niet van directory. Waarom?
Reacties
Antwoord
 Je programma doet precies wat u hem opdraagt: het verandert de werkdirectory voor  zelf  naar /home/enedil/projects/algo. Maar als het eenmaal is afgesloten, wordt de  shell “s  werkdirectory hersteld. 
 Ik denk wat je wilt om te bereiken is het veranderen van de werkdirectory van het bovenliggende proces, dwz de shell, zonder toevlucht te nemen tot een simpele cd. Er is  een methode , maar zoals de auteur zegt: doe het niet. 
Reacties
- Nitpick, maar de shell ' s werkdirectory is niet ' t hersteld, omdat deze nooit is gewijzigd. De shell is gewoon een proces, net als het programma. Elk programma heeft zijn eigen werkdirectory van '.
 - @Patrick, true. Conceptueel nauwkeuriger zou zijn dat uw werkmap is hersteld, in die zin dat uw proces " hersteld " (is actief op de voorgrond).
 
Answer
De huidige werkdirectory is lokaal voor het proces. Dus wat je wilt, is niet mogelijk.
Answer
 Je kunt ook de CDPATH omgevingsvariabele. Zoals uitgelegd in 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". 
 U kunt deze regel bijvoorbeeld toevoegen aan uw ~/.profile: 
CDPATH=~/projects 
 U kunt nu cd projects vanuit elke map starten en verplaatsen naar ~/projects. 
Answer
 Om dit voor de shell te doen, gebruik je de  source  -opdracht (gealiast aan .). Het zal de applicatie uitvoeren in de context van de huidige shell in plaats van een nieuwe shell-context te creëren. Dit is hoe u ook omgevingsvariabelen kunt instellen. Als je alle opstartscripts opmerkt in /etc/rc.d of /etc/init.d, zul je veel scripts zien die door andere scripts met de opdracht worden meegeleverd 
. /etc/init.d/rcvars 
 De . zorgt ervoor dat het script /etc/init.d/rcvars de wijzigingen blijven bestaan in de huidige omgeving. 
Reacties
- Je kunt ' geen C-programma draaien op deze manier alleen een shellscript.
 
alias proj='cd ~/enedil/projects/algo'cd ~/projects/algo? Het is een idee!