macOS下父目录与当前目录含空格时获取完整路径
解决macOS下Shell脚本处理含空格嵌套路径的权限问题
问题分析
你的脚本出现zsh: operation not permitted错误,核心原因有两点:
- 脚本开头的路径切换逻辑存在漏洞:
cd "dirname $0"里的$0未加引号包裹,当脚本所在路径包含空格时,dirname $0会被Shell拆分,导致cd命令接收到错误的路径参数。 - macOS隐私权限限制:当脚本尝试访问Desktop等受系统隐私保护的目录时,终端程序(如Terminal/iTerm2)可能未被授予对应访问权限,触发权限拒绝错误。
修正后的脚本
#!/bin/bash # 切换到脚本所在目录,正确处理含空格的路径,切换失败则退出 cd "$(dirname -- "$0")" || exit 1 # 检查是否传入路径参数 if [[ -z "$1" ]]; then echo "请传入路径参数" >&2 exit 1 fi # 安全获取目标路径的绝对路径 target_dir=$(dirname -- "$1") target_base=$(basename -- "$1") if [[ "$target_dir" == "." ]]; then # 处理相对路径,结合当前脚本目录的绝对路径 full_path="$(pwd -P)/$target_base" else # 切换到目标目录获取绝对路径,再拼接文件名 full_path="$(cd "$target_dir" >/dev/null 2>&1 && pwd -P)/$target_base" fi echo "$full_path"
权限配置补充
如果修正脚本后仍出现权限错误,需配置macOS隐私权限:
- 打开「系统偏好设置」→「安全性与隐私」→「隐私」选项卡
- 左侧列表选择「文件与文件夹」
- 找到你使用的终端程序(如Terminal、iTerm2),勾选「Desktop」等需要访问的目录权限
- 重启终端后重新运行脚本
内容的提问来源于stack exchange,提问作者emendelson
相关产品推荐
相关产品推荐

