将默认Shell从bash改为zsh后curl -o命令报错:curl: (56) response reading failed
解决zsh环境下curl报错(56) response reading failed (errno: 36)的问题
问题背景
之前在bash环境中运行以下curl命令完全正常:
curl -o '/Users/tomasjelinek/Google Drive/Můj disk/ISP_Orders_last.csv' 'ftp://Tomas%20Jelinek:PASSWORD@XX.XX.XXX.X/Marketing/Reports/60%20ISP%20Report/ISP_Orders_last.csv'
切换到zsh后,出现报错:
curl: (56) response reading failed (errno: 36)
即使设置zsh为默认Shell,报错依然存在。
错误原因分析
errno:36对应macOS系统的ENAMETOOLONG(路径/文件名过长),但核心问题是zsh与bash对包含特殊字符(空格、带重音字母)的路径/URL解析逻辑存在差异,同时zsh的默认文件名匹配选项可能干扰curl的参数传递。
解决方法
1. 调整路径的引号使用
将本地路径改用双引号包裹,确保zsh正确解析带重音的字符:
curl -o "/Users/tomasjelinek/Google Drive/Můj disk/ISP_Orders_last.csv" 'ftp://Tomas%20Jelinek:PASSWORD@XX.XX.XXX.X/Marketing/Reports/60%20ISP%20Report/ISP_Orders_last.csv'
也可以用反斜杠转义路径中的空格:
curl -o /Users/tomasjelinek/Google\ Drive/Můj\ disk/ISP_Orders_last.csv 'ftp://Tomas%20Jelinek:PASSWORD@XX.XX.XXX.X/Marketing/Reports/60%20ISP%20Report/ISP_Orders_last.csv'
2. 拆分输出路径,避免长路径干扰
先切换到目标目录,再执行curl命令,减少路径长度并避免特殊字符解析问题:
cd "/Users/tomasjelinek/Google Drive/Můj disk" curl -o ISP_Orders_last.csv 'ftp://Tomas%20Jelinek:PASSWORD@XX.XX.XXX.X/Marketing/Reports/60%20ISP%20Report/ISP_Orders_last.csv'
或者使用curl的--output-dir参数指定输出目录:
curl --output-dir "/Users/tomasjelinek/Google Drive/Můj disk" -o ISP_Orders_last.csv 'ftp://Tomas%20Jelinek:PASSWORD@XX.XX.XXX.X/Marketing/Reports/60%20ISP%20Report/ISP_Orders_last.csv'
3. 检查curl版本一致性
zsh和bash可能使用不同版本的curl(比如系统自带vs brew安装),分别在两个Shell中执行以下命令确认:
which curl curl --version
如果版本不同,调整zsh的PATH环境变量,确保使用与bash相同的curl版本。
4. 禁用zsh的文件名匹配选项
zsh的nomatch选项会对URL中的特殊字符(如%)触发文件名匹配,导致参数传递错误。可以在命令前加noglob前缀禁用该行为:
noglob curl -o '/Users/tomasjelinek/Google Drive/Můj disk/ISP_Orders_last.csv' 'ftp://Tomas%20Jelinek:PASSWORD@XX.XX.XXX.X/Marketing/Reports/60%20ISP%20Report/ISP_Orders_last.csv'
或者临时关闭nomatch选项:
setopt nonomatch curl -o '/Users/tomasjelinek/Google Drive/Můj disk/ISP_Orders_last.csv' 'ftp://Tomas%20Jelinek:PASSWORD@XX.XX.XXX.X/Marketing/Reports/60%20ISP%20Report/ISP_Orders_last.csv' setopt nomatch # 恢复默认设置
内容的提问来源于stack exchange,提问作者Tomáš Jelínek
相关产品推荐
相关产品推荐

