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!