перейдите в родительский каталог, не зная абсолютного пути к нему - PullRequest
0 голосов
/ 18 октября 2019

Мне нужно вернуться в родительский каталог внутри bash-скрипта. Я знаю, что каталог будет находиться в моем текущем пути, но не настолько, насколько он далеко, поскольку сценарий мог бы поместить меня где-то на 2-5 уровней. Скрипт является частью клонированного репозитория git, поэтому я не могу начать с корня пользователя, так как не буду знать, где они его клонировали или на каком уровне он будет ниже.

Скажем, моя файловая структура выглядит следующим образом:

User's dir structure
  repo
    foo
      bar
       baz
        a
       fizz
        b
        bang
          c

Мне нужно вернуться к foo, но я не знаю, если я в a,b, или c, или даже bar.

Моя текущая мысль состоит в том, чтобы pwd и обрезать его, поэтому у меня есть только */foo/, затем перейдите к этому, но действительно ли это самый эффективный способ?

Ответы [ 3 ]

3 голосов
/ 18 октября 2019

Установить переменную в исходный каталог.

origdir=$(pwd)
# code that jumps around...
cd "$origdir"
1 голос
/ 18 октября 2019

Вы также можете использовать стек каталогов.

pushd -n "$PWD"  # Store the current working directory on the stack
...
popd  # Return to the directory on top of the stack

Это особенно полезно, если вам не нужно много менять каталоги между pushd и popd, так как выможно просто написать

pushd some/directory/path  # Puts current working dir on the stack, then cd's to the argument
...
popd

(Даже если есть изменения, вы все равно можете использовать pushd. pushd foo эквивалентно pushd -n "$PWD"; cd foo.)

0 голосов
/ 18 октября 2019

Вы можете добраться до корня вашего репозитория следующим образом:

cd "$(git rev-parse --show-toplevel)"

Итак, чтобы попасть из любой точки репо в каталог foo в его корне:

cd "$(git rev-parse --show-toplevel)/foo"

git-rev-parse документация

...