Jak wyjaśnili inni, katalog jest zmieniany w procesie potomnym skryptu, a nie w procesie terminalowym, z którego skrypt jest wywoływany. Po śmierci procesu potomnego wracasz do terminala, który został tam, gdzie był.
Kilka alternatyw:
1. Link symboliczny
Umieść w swoim domu symboliczne łącze do długiej ścieżki, do której chcesz łatwo uzyskać dostęp
$ ln -s /home/alex/Documents/A/B/C ~/pathABC
następnie przejdź do katalogu za pomocą:
$ cd ~/pathABC
2. Alias
Umieść alias w swoim ~ / .bashrc:
alias pathABC="cd /home/alex/Documents/A/B/C"
( stąd )
3. Funkcja
Utwórz funkcję, która zmienia katalog, funkcja działa w trakcie działania twojego terminala, a następnie może zmienić jego katalog.
( stąd )
4. Unikaj biegania jako dziecko
Źródło skryptu zamiast go uruchamiać. Sourcing (wykonywany przez .
lub source
) powoduje, że skrypt jest wykonywany w tej samej powłoce, a nie we własnej podpowłoce.
$ . ./pathABC
( stąd i tutaj )
5. Vars z obsługą CD
Ustaw cdable_vars
opcję w swoim ~/.bashrc
i utwórz zmienną środowiskową do katalogu:
shopt -s cdable_vars
export pathABC="/home/alex/Documents/A/B/C"
Następnie możesz użyć cd pathABC
( stąd )