使用sudo管理员权限运行Automator服务创建symlink报错如何解决
问题根因
- 你的shell脚本缺少执行权限,所以直接运行会报
permission denied - AppleScript调用存在三个错误:
- 没有对输入路径做特殊字符转义,文件名带空格、引号时会解析失败
- 未正确处理多文件输入,
input是选中的文件数组,不能直接取POSIX path of input - 多余的
sudo关键字,with administrator privileges参数已经会自动提权,不需要额外加sudo;部分环境下~在脚本执行上下文无法解析为当前用户家目录,会导致路径找不到,出现command not found
修复步骤
第一步:给shell脚本添加执行权限
打开终端执行以下命令,替换为你实际的脚本路径:
chmod +x ~/Documents/z_misc/makesymlink # 如果你脚本后缀是.sh,就执行: # chmod +x ~/Documents/z_misc/makesymlink.sh
这一步会解决无sudo时的permission denied报错。
第二步:替换为修正后的AppleScript
on run {input, parameters} -- 拼接所有选中文件的路径,自动转义特殊字符 set cmdArgs to "" repeat with f in input set cmdArgs to cmdArgs & " " & quoted form of POSIX path of f end repeat -- 自动获取家目录拼接脚本路径,避免~解析失败 set scriptPath to quoted form of (POSIX path of (path to home folder) & "Documents/z_misc/makesymlink") -- 如果脚本带.sh后缀,就把上面的文件名改为makesymlink.sh do shell script scriptPath & cmdArgs with administrator privileges end run
额外注意事项
- 脚本文件名和调用路径必须完全匹配,如果你把脚本存为
makesymlink.sh,调用的时候也要写全.sh后缀,否则会报command not found - 如果你后续移动了脚本的保存位置,记得同步修改AppleScript里的脚本路径
内容的提问来源于stack exchange,提问作者Max Well
相关产品推荐
相关产品推荐

