Jeg ville lave et simpelt C
program til at skifte til min projektmappe. Dens indhold er som følger:
#include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; }
Jeg kompilerede det med følgende kommando (pro.c
er dets filnavn):
gcc pro.c -o /usr/local/bin/pro
Der var ingen fejl eller advarsler. Men når jeg kører det, ændrer det ikke biblioteket. Hvorfor?
Kommentarer
Svar
Dit program gør nøjagtigt, hvad du beder den om at gøre: den ændrer arbejdsmappen til selv til /home/enedil/projects/algo
. Men når den kommer ud, gendannes shell “s -mappen.
Jeg gætter på, hvad du vil have at opnå er at ændre arbejdsprogrammet for den overordnede proces, dvs. skallen, uden at bruge en simpel cd
. Der er en metode , men som forfatteren siger: gør det ikke.
Kommentarer
- Nitpick, men skallen ' s arbejdsmappe er ikke ' t gendannet, fordi den aldrig ændrede sig. Skallen er simpelthen en proces, ligesom programmet er. Hvert program har det ' s egen arbejdsmappe.
- @Patrick, sandt. Konceptuelt mere nøjagtigt ville være din arbejdsmappe gendannes, idet din proces er " gendannet " (er aktiv i forgrunden).
Svar
Den aktuelle arbejdsmappe er lokal for processen. Så det, du ønsker, er ikke muligt.
Svar
Du kan også bruge CDPATH
miljøvariabel. Som forklaret i 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".
Så for eksempel kan du tilføje denne linje til din ~/.profile
:
CDPATH=~/projects
Du kan nu køre cd projects
fra ethvert bibliotek og flytte til ~/projects
.
Svar
For at gøre dette for skallen skal du bruge source
kommando (alias til .
). Det kører applikationen i sammenhæng med den aktuelle shell i stedet for at oprette en ny shell-kontekst. Sådan kan du også indstille miljøvariabler. Hvis du bemærker alle opstartsskripterne i /etc/rc.d
eller /etc/init.d
, vil du se mange scripts, der er inkluderet i andre scripts med kommandoen
. /etc/init.d/rcvars
.
forårsager scriptet /etc/init.d/rcvars
ændringerne fortsætter i det nuværende miljø.
Kommentarer
- Du kan ' ikke køre et C-program på denne måde kun et shell-script.
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Det er en idé!