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

443
Dash Conroy

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

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

0
Вы должны `источник` сценария. Смотрите [этот похожий вопрос] (https://unix.stackexchange.com/q/27139). aguslr 5 лет назад 1

1 ответ на вопрос

4
grawity

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

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

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

    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 
Вау, спасибо большое! Это было очень полезно! Спасибо за подробный ответ со всеми возможностями! Dash Conroy 5 лет назад 0