这是一个 shell 脚本(.sh 文件)。我需要根据当前目录创建一个绝对路径。我知道pwd
,但是如何将它与另一个字符串连接起来?这是我正在尝试做的一个例子:
"$pwd/some/path"
请您参考如下方法:
听起来像你想要的:
path="$(pwd)/some/path"
$(
打开一个子shell(
)
关闭它),其中的内容作为脚本执行,因此任何输出都放在字符串中的那个位置。
更有用的是获取正在运行的脚本的目录:
dot="$(cd "$(dirname "$0")"; pwd)"
path="$dot/some/path"
这更有用,因为无论您在哪里运行脚本,它都会解析到相同的路径:
> pwd
~
> ./my_project/my_script.sh
~/my_project/some/path
而不是:
> pwd
~
> ./my_project/my_script.sh
~/some/path
> cd my_project
> pwd
~/my_project
> ./my_script.sh
~/my_project/some/path
更复杂,但如果您需要当前脚本的目录(如果它已通过符号链接(symbolic link)执行)(例如,在通过自制软件安装脚本时很常见),那么您需要解析并遵循符号链接(symbolic link):
if [[ "$OSTYPE" == *darwin* ]]; then
READLINK_CMD='greadlink'
else
READLINK_CMD='readlink'
fi
dot="$(cd "$(dirname "$([ -L "$0" ] && $READLINK_CMD -f "$0" || echo "$0")")"; pwd)"
它的工作更复杂,要求更高(例如,安装了与 gnu 兼容的 readlink),所以我倾向于不经常使用它。只有当我确定我需要它时,比如通过自制软件安装命令。