Почему "cd" не работает в сценарии оболочки?

Как объясняли другие, каталог изменяется в дочернем процессе вашего скрипта, а не в терминальном процессе, из которого вызывается скрипт. После того, как дочерний процесс умирает, вы возвращаетесь в терминал, который остается там, где он был.

Несколько альтернатив:

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. Избегайте бега как ребенок

Создайте исходный код своего скрипта вместо того, чтобы запускать его. Поиск поставщиков (осуществляется . или source) приводит к выполнению скрипта в той же оболочке, а не в его собственной подоболочке.

$ . ./pathABC

(из здесь и здесь)

5. вары, поддерживающие компакт-диски

Установите cdable_vars вариант в вашем ~/.bashrc и создайте переменную среды для каталога:

shopt -s cdable_varsexport pathABC="/home/alex/Documents/A/B/C"

Тогда вы можете использовать cd pathABC

(из здесь)