Как объяснили другие, каталог изменяется в дочернем процессе вашего скрипта, а не в терминальном процессе, из которого вызывается скрипт. После того, как дочерний процесс умирает, вы возвращаетесь в терминал, который остался там, где он был.
Несколько альтернатив:
1. Символическая ссылка
Поместите символическую ссылку в вашем доме на длинный путь, который вы хотите легко получить доступ
$ ln -s /home/alex/Documents/A/B/C ~/pathABC
затем получить доступ к каталогу с помощью:
$ cd ~/pathABC
2. Псевдоним
Поместите псевдоним в ваш ~ / .bashrc:
alias pathABC="cd /home/alex/Documents/A/B/C"
( отсюда )
3. Функция
Создайте функцию, которая изменяет каталог, функция запускается в процессе работы вашего терминала и затем может изменить свой каталог.
( отсюда )
4. Избегайте бега в детстве
Источник ваш сценарий вместо того, чтобы запустить его. Sourcing (выполняется с помощью .
или source
) приводит к тому, что скрипт выполняется в той же оболочке, а не в своей собственной подоболочке.
$ . ./pathABC
( отсюда и здесь )
5. CD-способные Vars
Установите cdable_vars
параметр в вашем ~/.bashrc
и создайте переменную окружения для каталога:
shopt -s cdable_vars
export pathABC="/home/alex/Documents/A/B/C"
Тогда вы можете использовать cd pathABC
( отсюда )