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
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.
alias proj='cd ~/enedil/projects/algo'cd ~/projects/algo? Ez egy ötlet!