chdir (< könyvtár >) nem változtatja meg a könyvtárat, miután kilépett a héjból

Egy egyszerű C programot akartam készíteni, hogy áttérjek a projektkönyvtáramra. Tartalma a következő:

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

A következő paranccsal állítottam össze (pro.c a fájl neve):

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

Nem voltak hibák és figyelmeztetések. De amikor futtatom, nem változtat könyvtárat. Miért?

Megjegyzések

  • Ehelyett álnevet is használhat – alias proj='cd ~/enedil/projects/algo'
  • @MichaelDurrant ó, erre gondoltál: cd ~/projects/algo? Ez egy ötlet!
  • Ez terv szerint van!

Válasz

A program pontosan azt csinálja, amit mondani kell neki: megváltoztatja a munkakönyvtárat erre: /home/enedil/projects/algo. De ha kilép, a shell “s munkakönyvtár helyreáll.

Gondolom, mit akarsz elérni annyit jelent, hogy megváltoztatjuk a szülőfolyamat munkakönyvtárát, azaz a shellt, anélkül, hogy egyszerű cd t kellene igénybe venni. metódus , de ahogy a szerzője mondja: ne csináld.

Megjegyzések

  • Nitpick, de a shell ' munkakönyvtár nem áll helyre ', mert soha nem változott. A shell egyszerűen egy folyamat, csakúgy, mint a program. Minden programnak van ' saját munkakatalógusa.
  • @Patrick, true. Fogalmilag pontosabb lenne, ha a munkakönyvtárát visszaállítanák, mivel a folyamat " helyreállt " ( aktív az előtérben).

Válasz

Az aktuális munkakönyvtár lokális a folyamat számára. Tehát az, amit akar, nem lehetséges.

Válasz

Használhatja a CDPATH környezeti változó. Amint azt a man bash cikkben kifejtettük:

 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". 

Tehát például hozzáadhatja ezt a sort a

:

CDPATH=~/projects 

Mostantól futtathat cd projects bármelyik könyvtárból, és áthelyezheti a következőhöz: ~/projects.

Válasz

Ehhez használja a source parancs (más néven: .). Futtatja az alkalmazást az aktuális héj kontextusában, nem pedig új héjkörnyezetet hoz létre. Így állíthat be környezeti változókat is. Ha az összes indító szkriptet észreveszi a /etc/rc.d vagy a /etc/init.d fájlban, akkor sok olyan parancsfájlt fog látni, amelyeket más parancsfájlok is tartalmaznak a paranccsal

. /etc/init.d/rcvars 

A . a /etc/init.d/rcvars parancsfájlt idézi elő. változások a jelenlegi környezetben is fennállnak.

Megjegyzések

  • ' nem futtathat C programot így csak egy shell parancsfájl.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük