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

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

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

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

решение1

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

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

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

    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
    

решение2

На самом деле, после долгих поисков я только что обнаружил, что если вам нужно сменить каталог и при этом сохранить ту же оболочку, чтобы получить все ответы в вашем текущем скрипте, вы можете использовать:

(cd your_dir; do_some_command_there)

Например, мне нужно было использовать:

((cd your_dir; git remote -v | wc -l)

Работает как часы!

Связанный контент