如何获取脚本中没有最后一个文件夹的当前路径?

如何获取脚本中没有最后一个文件夹的当前路径?

我想运行一个脚本,将当前路径保存到变量中,不包括运行脚本的文件夹本身。示例:

/tmp/test/test2/test3/test.sh

path=$PWD
echo $path

给予/tmp/test/test2/test3.但我想排除 sh 脚本所在的文件夹。

所以我想要的输出是: /tmp/test/test2

答案1

您可以使用

dir=${PWD%/*}    # or:  dir=$( dirname "$PWD" )

或者

dir="$PWD/.."

或者

dir=".."

在第一种情况下,PWD包含当前工作目录的变量用于通过删除最后一个/及其后的所有内容来获取上一级目录的路径。

在第二种情况下,PWD变量用于简单地为上面的目录创建一个路径..

在第三种情况下,我们只需使用当前目录的相对路径来引用上面的目录。

您使用哪种替代方案取决于您要使用该路径的用途。

例子:

$ echo $PWD
/tmp/shell-sh.jAtMYgn0
$ dir=${PWD%/*}
$ echo "$dir"
/tmp
$ dir="$PWD/.."
$ echo "$dir"
/tmp/shell-sh.jAtMYgn0/..
$ dir=".."
$ echo "$dir"
..

答案2

尝试下面的代码,

dirname "$(pwd)"
  • dirname - 从文件/目录路径中去除后缀

答案3

zsh

dir=$PWD:h

就像dirname,这会从 的末尾删除一个目录组件$PWD。当 $PWD/$dir就变得/像与dirname

比优势多一

dir=$(dirname -- "$PWD")

$PWD如果 dirname以换行符结尾,它仍然有效。

请注意,它不一定是当前目录的父目录。例如,当$PWDis/tmp并且/tmp恰好是 的符号链接时/var/tmp,当前目录的父目录将是/var,而不是/。要获取父目录,您可以执行以下操作:

dir=$PWD/..
dir=$dir:P

或者:

dir=$PWD:P:h

:P修饰符创建$dir规范路径(解析所有符号链接、...组件,如 GNU readlink -f))。

或者 POSIXly:

dir=$(cd -P .. && pwd -P)

无论如何,请注意,$PWD脚本内与脚本的路径无关。如果您想要包含脚本的目录的父目录,那么该目录将$0:P:h:h位于zsh.

答案4

当前工作目录即:/home/dev/other

dir=$PWD

父目录

parentdir="$(dirname "$dir")"`

相关内容