Bash脚本调用xcodebuild时变量路径报错,直接输入路径正常
Xcode清理脚本执行报错的修复方案
问题根源
- 默认路径里的
~没被正确解析:bash里用双引号包裹~时,它不会被识别为用户主目录,只会被当作普通字符串处理,导致路径无效。 - 引号处理的代码语法错误:原脚本中
$("$path_to_workspace" | tr -d \"")这行逻辑错误,它把路径变量当成可执行命令去运行,而非将路径内容传递给tr命令删除引号,因此触发"No such file or directory"报错——系统误以为你要执行~/my/workspace/location这个不存在的命令。
修复后的完整脚本
cxc () { # 用$HOME替代~,确保主目录路径被正确解析 local path_to_workspace="${HOME}/my/workspace/location" local scheme="SchemeName" if [ ! -z "$1" ]; then path_to_workspace="$1" fi if [ ! -z "$2" ]; then scheme="$2" fi if [ -z "$1" ]; then echo "No arguments supplied. Using default." fi # 用bash内置参数扩展删除双引号,比调用tr更高效 path_to_workspace="${path_to_workspace//\"/}" xcodebuild clean -workspace "$path_to_workspace" -scheme "$scheme" }
重点修改说明
- 路径解析修正:把原默认路径
"~/my/workspace/location"替换为"${HOME}/my/workspace/location",确保主目录路径无论是否被引号包裹都能正确解析。如果习惯用~写法,也可以直接写local path_to_workspace=~/my/workspace/location(不用引号),bash会自动将~转换为用户主目录。 - 引号处理修正:替换原错误的命令执行逻辑,使用bash内置的
${变量//旧字符/新字符}语法直接删除变量中的所有双引号,无需启动额外的tr进程,既高效又避免语法错误。
测试验证
修复后,无论是使用默认路径,还是传入带引号的路径参数(比如cxc "/Users/yourname/another/workspace"),脚本都能正常执行xcodebuild clean命令,不会再出现路径找不到的错误。
内容的提问来源于stack exchange,提问作者h.and.h
相关产品推荐
相关产品推荐

