You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下父目录与当前目录含空格时获取完整路径

解决macOS下Shell脚本处理含空格嵌套路径的权限问题

问题分析

你的脚本出现zsh: operation not permitted错误,核心原因有两点:

  1. 脚本开头的路径切换逻辑存在漏洞:cd "dirname $0"里的$0未加引号包裹,当脚本所在路径包含空格时,dirname $0会被Shell拆分,导致cd命令接收到错误的路径参数。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:35:20