Chciałem stworzyć prosty C program do przejścia do katalogu mojego projektu. Jego zawartość jest następująca: 
#include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; } 
 Skompilowałem go za pomocą następującego polecenia (pro.c to nazwa pliku): 
gcc pro.c -o /usr/local/bin/pro 
Nie było błędów ani ostrzeżeń. Ale kiedy go uruchamiam, nie zmienia katalog. Dlaczego?
Komentarze
Odpowiedź
 Twój program robi dokładnie to, co mu każesz: zmienia katalog roboczy dla  samego  na /home/enedil/projects/algo. Ale po zakończeniu przywracany jest katalog roboczy  shell „s . 
 Zgaduję, czego chcesz do osiągnięcia jest zmiana katalogu roboczego procesu nadrzędnego, tj. powłoki, bez uciekania się do prostego cd. Istnieje  a metoda , ale jak mówi jej autor: nie rób tego. 
Komentarze
- Nitpick, ale powłoka ' nie został ' przywrócony, ponieważ nigdy się nie zmienił. Powłoka jest po prostu procesem, tak jak program. Każdy program ma swój własny katalog roboczy '.
 - @Patrick, prawda. Koncepcyjnie dokładniej byłoby, gdyby Twój katalog roboczy został przywrócony, ponieważ proces został " przywrócony " (jest aktywny na pierwszym planie).
 
Odpowiedź
Bieżący katalog roboczy jest lokalny dla procesu. Więc to, czego chcesz, nie jest możliwe.
Odpowiedź
 Możesz także użyć CDPATH zmienna środowiskowa. Jak wyjaśniono w 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". 
 Na przykład możesz dodać tę linię do swojego ~/.profile: 
CDPATH=~/projects 
 Możesz teraz uruchomić cd projects z dowolnego katalogu i przenieść do ~/projects. 
Odpowiedź
 Aby to zrobić dla powłoki, użyj  source  polecenie (alias do .). Uruchomi aplikację w kontekście bieżącej powłoki, zamiast tworzyć nowy kontekst powłoki. W ten sposób możesz również ustawić zmienne środowiskowe. Jeśli zauważysz wszystkie skrypty startowe w /etc/rc.d lub /etc/init.d, zobaczysz wiele skryptów dołączonych do innych skryptów z poleceniem 
. /etc/init.d/rcvars 
 . powoduje, że skrypt /etc/init.d/rcvars zmienia się i utrzymuje się w bieżącym środowisku. 
Komentarze
- Możesz ' t uruchomić program w języku C w ten sposób tylko skrypt powłoki.
 
alias proj='cd ~/enedil/projects/algo'cd ~/projects/algo? To pomysł!