Bash脚本中使用变量路径执行docker cp失败问题求助
解决Bash脚本读取CSV执行docker cp失败的问题
问题分析
脚本执行docker cp报错但手动执行命令正常,核心原因有三点:
- CSV第一行是表头
fileuuid,脚本未跳过,导致第一次循环用无效UUID执行命令 - 错误设置
IFS=',',你的CSV每行单个UUID无逗号分隔,该设置反而干扰行读取逻辑 - 若CSV是Windows环境生成,行尾会带
\r回车符,read读取后UUID包含多余字符,导致容器内路径无效
修正后的脚本
INPUT=FileIdsToRemove.csv COPYDIR=/var/lib/mayan/document_file_storage [ ! -f "$INPUT" ] && { echo "\"$INPUT\" file not found"; exit 99; } # 跳过表头,读取有效UUID行 tail -n +2 "$INPUT" | while read -r fileuuid do # 移除可能存在的Windows回车符 fileuuid=$(echo "$fileuuid" | tr -d '\r') echo "uuid : $fileuuid" docker cp "mayan_app_1:/var/lib/mayan/document_file_storage/$fileuuid" ./ done
修改说明
- 跳过表头:用
tail -n +2直接过滤CSV第一行表头,只处理有效UUID数据 - 移除多余IFS设置:恢复默认IFS,确保
read正确按行读取内容 - 处理回车符:通过
tr -d '\r'清除可能的Windows格式回车符,保证UUID字符串纯净 - 添加双引号:给文件路径和变量加双引号,避免特殊字符引发的解析问题
- read -r参数:防止
read对行内特殊字符(如反斜杠)进行转义
内容的提问来源于stack exchange,提问作者jalwan
相关产品推荐
相关产品推荐

