Когда я изменяю рабочий каталог в скрипте и выполняю его, рабочий каталог изменяется только по указанному пути в скрипте. Вот мой сценарий:
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd
(чтобы убедиться, что он действительно поменял каталог)

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

1 ответ1

4

Это нормально. "Текущий" или "рабочий" каталог является параметром для процесса, и процесс может изменить только свой рабочий каталог. Автономные сценарии выполняются как отдельный процесс оболочки и не могут влиять на родительскую оболочку (фактически родитель не всегда может быть оболочкой).

Вам нужно будет использовать функции, встроенные в вашу оболочку, такие как:

  • функции оболочки:

    mycd() {
        cd /media/hard/drive/partitionX/;
        pwd;
    }
    
  • псевдонимы оболочки:

    alias mycd='cd /media/hard/drive/partitionX; pwd'
    
  • "источник" сценария вместо его выполнения:

    . mycd.sh
    

Если вашей главной целью является создание ярлыков для определенных каталогов, вы также можете использовать:

  • символические ссылки в более удобном месте:

    ln -s /media/hard/drive/partitionX ~/partX
    cd ~/partX
    
  • переменные ($ mydir):

    mydir=/media/hard/drive
    cd $mydir
    
  • функция $ CDPATH:

    CDPATH=".:/media/hard/drive"
    cd partitionX
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .