Сценарий для изменения текущего каталога (cd, pwd)

Я хочу запустить скрипт, чтобы просто изменить текущий рабочий каталог:

#!/bin/bash cd web/www/project 

Но после того, как я запустил его, текущий pwd останется без изменений! Как я могу это сделать?

Это ожидаемое поведение и уже обсуждалось несколько раз.

Скрипт запускается в подоболочке и не может изменять рабочий каталог родительской оболочки. Его эффекты теряются, когда они заканчиваются.

Чтобы постоянно менять каталог, вы должны указать сценарий, как в

 . ./script 

Для небольших задач, таких как это, вместо создания скрипта, создайте псевдоним, подобный этому,

 $ alias cdproj='cd /dir/web/www/proj' 

Вы должны добавить это в свой .bashrc файл, если хотите, чтобы он устанавливался для каждой интерактивной оболочки.

Теперь вы можете запустить это как $ cdproj .

Хотя есть ответы, которые выполняют точные действия, которые вы хотите, более стандартным методом для этой цели является создание символической ссылки:

 ln -s ~/web/www/project proj #use full path to dir! 

Затем вы можете cd в каталог, используя имя proj :

 cd proj 

Этот метод более гибкий, поскольку вы можете получить доступ к файлам с использованием короткого имени без cd :

 ls proj/ #note the endslash! vim proj/file.x 

Использовать exec bash в конце

Сценарий bash работает с текущей средой или с дочерними элементами, но никогда не находится в исходной среде.

Тем не менее, этот вопрос часто задают, потому что нужно оставить его в командной строке bash в определенном каталоге после выполнения сценария bash из другого каталога.

Если это так, просто выполните дочерний экземпляр bash в конце скрипта:

 #!/bin/bash cd web/www/project exec bash 

Если вы перейдете из каталога далеко в файловой системе. Я порекомендую autojump .