我想运行一个脚本,将当前路径保存到变量中,不包括运行脚本的文件夹本身。示例:
/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以换行符结尾,它仍然有效。
请注意,它不一定是当前目录的父目录。例如,当$PWD
is/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")"`