Skip to main content
 首页 » 编程设计

shell之获取当前目录并连接路径

2024年12月31日10mayingbao

这是一个 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),所以我倾向于不经常使用它。只有当我确定我需要它时,比如通过自制软件安装命令。