Изменить текущий каталог из Bash-скрипта - PullRequest
169 голосов
/ 17 мая 2009

Можно ли изменить текущий каталог из скрипта?

Я хочу создать утилиту для навигации по каталогам в Bash. Я создал тестовый скрипт, который выглядит следующим образом:

#!/bin/bash
cd /home/artemb

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

Ответы [ 14 ]

0 голосов
/ 08 марта 2019

Добавьте ниже строку cd в вашем шеллскрипте:

exec $SHELL
0 голосов
/ 11 января 2018

Я также создал утилиту под названием goat , которую можно использовать для упрощения навигации.

Вы можете просмотреть исходный код на GitHub .

Начиная с v2.3.1 обзор использования выглядит следующим образом:

# Create a link (h4xdir) to a directory:
goat h4xdir ~/Documents/dev

# Follow a link to change a directory:
cd h4xdir

# Follow a link (and don't stop there!):
cd h4xdir/awesome-project

# Go up the filesystem tree with '...' (same as `cd ../../`):
cd ...

# List all your links:
goat list

# Delete a link (or more):
goat delete h4xdir lojban

# Delete all the links which point to directories with the given prefix:
goat deleteprefix $HOME/Documents

# Delete all saved links:
goat nuke

# Delete broken links:
goat fix
0 голосов
/ 11 января 2018

Мне нравится делать одно и то же для разных проектов без запуска новой оболочки.

В вашем случае:

cd /home/artemb

Сохранить the_script как:

echo cd /home/artemb

Затем запустите его:

\`./the_script\`

Затем вы попадаете в каталог, используя ту же оболочку.

0 голосов
/ 07 февраля 2016

Этот подход мне проще.

Предположим, на персональном iMac, где вы являетесь администратором, в каталоге по умолчанию, когда открывается окно командной строки, / Users / jdoe, это будет каталог для перехода: / Users / jdoe / Desktop / Mongo / db 3.2.1 / бен.

Вот шаги, которые могут сделать работу:

  1. vi монгобин, в который я вошел: cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin в первой строке.
  2. chmod 755 mongobin
  3. source mongobin
  4. pwd

Voila!

...