Windows可用但Mac失效的Cloud Foundry应用删除Shell脚本求助
Cloud Foundry应用删除脚本在Mac执行失败的排查与修复
原脚本内容:
#!/bin/bash read -p "Enter your ID:" uid echo read -sp "Enter your password:" pwd echo cf login -a test.net -u $uid -p $pwd -o TEST1 -s Space1 file=test.txt for i in `cat $file` do cf delete "$i" -f -r done
常见失败原因及修复方案
1. Windows换行符导致应用名识别错误
Windows生成的test.txt采用CRLF(\r\n)换行格式,而Mac默认使用LF(\n)。原脚本用cat $file读取时,会把\r当成应用名的一部分,导致cf delete无法匹配到正确应用。
修复方式:
- 转换文件换行符:在Mac上通过
brew install dos2unix安装工具,执行dos2unix test.txt完成转换 - 脚本内直接处理:用
tr -d '\r'去除回车符,避免修改原文件
2. 循环读取逻辑存在缺陷
用for i in cat $file``的读取方式,若应用名包含空格,会被Shell拆分成多个循环项,触发错误的删除操作。改用while read循环能安全处理含空格的应用名。
3. 变量未加双引号引发解析错误
原脚本中$uid、$pwd未用双引号包裹,若账号或密码包含特殊字符(如空格、!),会被Shell错误解析,导致登录失败。
修改后的完整脚本
#!/bin/bash read -p "Enter your ID:" uid echo read -sp "Enter your password:" pwd echo # 登录Cloud Foundry,变量加双引号避免特殊字符解析问题 cf login -a test.net -u "$uid" -p "$pwd" -o TEST1 -s Space1 file=test.txt # 处理Windows换行符,用while循环安全读取应用名 while IFS= read -r app_name do # 跳过文件中的空行 [[ -z "$app_name" ]] && continue cf delete "$app_name" -f -r done < <(tr -d '\r' < "$file")
额外注意事项
- 确认Mac上已正确安装Cloud Foundry CLI,执行
which cf能返回有效路径 - 若Mac默认Shell为zsh,需用
bash your_script.sh运行脚本,规避Shell语法差异问题
内容的提问来源于stack exchange,提问作者Tamilselvan
相关产品推荐
相关产品推荐

