cd到父目录而不知道它的绝对路径

时间:2019-10-18 15:49:53

标签: bash cd

我需要回到bash脚本中的父目录。我知道该目录将位于我当前的路径中,但不会超过该目录的高度,因为脚本可能会将我放置在2到5级的深度。该脚本是克隆的git repo的一部分,因此我无法从用户的根目录开始,因为我不知道他们将其克隆到何处或下降了几级。

假设我的文件结构如下:

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

我需要回到foo,但是我不知道我是ab还是c,甚至是{{ 1}}。

我目前的想法是pwd并削减它,所以我只用bar然后按cd即可,但这真的是最有效的方法吗?

3 个答案:

答案 0 :(得分:3)

在原始目录中设置一个变量。

origdir=$(pwd)
# code that jumps around...
cd "$origdir"

答案 1 :(得分:1)

您还可以使用目录堆栈。

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

如果您不需要在pushdpopd之间进行很多目录更改,因为您只需编写即可,则此功能特别有用

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

(即使有更改,您仍然可以使用pushdpushd foo等同于pushd -n "$PWD"; cd foo。)

答案 2 :(得分:0)

您可以这样进入存储库的根目录:

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

因此,要从存储库内的任何位置访问其根目录下的foo目录:

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

git-rev-parse documentation