chdir (< directory >) ' t cambia directory dopo essere usciti dalla shell

Volevo creare un semplice programma C per passare alla directory del mio progetto. Il suo contenuto è il seguente:

#include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; } 

Lho compilato con il seguente comando (pro.c è il nome del file):

gcc pro.c -o /usr/local/bin/pro 

Non sono stati rilevati errori né avvisi. Ma quando lo eseguo, non cambia directory. Perché?

Commenti

  • Potresti invece utilizzare un alias – alias proj='cd ~/enedil/projects/algo'
  • @MichaelDurrant oh, volevi dire cd ~/projects/algo? È unidea!
  • È di progettazione!

Rispondi

Il tuo programma fa esattamente quello che gli dici di fare: cambia la directory di lavoro per se stesso in /home/enedil/projects/algo. Ma una volta terminato, la directory di lavoro shell “s viene ripristinata.

Immagino quello che vuoi da ottenere è cambiare la directory di lavoro del processo genitore, cioè la shell, senza ricorrere a un semplice cd. Cè a metodo , ma come dice lautore: non farlo.

Commenti

  • Nitpick, ma la shell ' non è ' ripristinata, perché non è mai cambiata. La shell è semplicemente un processo, proprio come lo è il programma. Ogni programma ha la ' directory di lavoro.
  • @Patrick, true. Concettualmente più accurato sarebbe la directory di lavoro ripristinata, in quanto il processo è " ripristinato " (è attivo in primo piano).

Risposta

La directory di lavoro corrente è locale al processo. Quindi, quello che vuoi non è possibile.

Rispondi

Puoi anche utilizzare CDPATH variabile ambientale. Come spiegato 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". 

Quindi, ad esempio, potresti aggiungere questa riga al tuo ~/.profile:

CDPATH=~/projects 

Ora puoi eseguire cd projects da qualsiasi directory e spostare a ~/projects.

Risposta

Per eseguire questa operazione per la shell, utilizzare il source (con alias a .). Eseguirà lapplicazione nel contesto della shell corrente invece di creare un nuovo contesto di shell. È così che puoi impostare anche le variabili dambiente. Se noti tutti gli script di avvio in /etc/rc.d o /etc/init.d, vedrai molti script inclusi da altri script con il comando

. /etc/init.d/rcvars 

. fa in modo che lo script /etc/init.d/rcvars cambia persiste nellambiente corrente.

Commenti

  • Puoi ' t eseguire un programma C in questo modo, solo uno script di shell.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *