Unix Korn Shell中用curl下载CSV报错‘curl未找到’问题排查
问题排查与解决
你的问题是:更换CSV下载URL后,执行SSH代理服务器的curl命令时提示“curl not found”,但原脚本之前能正常运行。下面是几个排查方向和解决办法:
确认代理服务器上curl的实际路径
原脚本里用了/usr/bin/curl的绝对路径,但有可能代理服务器上的curl安装路径不是这个。你可以在本地执行这条命令,查看代理服务器上curl的真实路径:ssh ${PROXY_SERVER} "which curl"把得到的路径替换掉命令里的
/usr/bin/curl即可。处理URL中的特殊字符解析问题
新URL里包含?format=csv,问号在shell中属于通配符,当你用双引号包裹远程命令时,本地shell会尝试解析这个问号,导致传到代理服务器的命令被破坏,进而出现curl相关的错误。有两种解决方式:- 对URL中的问号进行转义:
ssh ${PROXY_SERVER} "rm -f ${SHARED_DATE_FILE} && /usr/bin/curl --silent https://example-123.com/dts/inrs\?format=csv > ${SHARED_DATE_FILE}" - 用单引号包裹远程命令(注意:如果
${SHARED_DATE_FILE}是本地变量,需要把变量部分从单引号里拆出来):ssh ${PROXY_SERVER} 'rm -f '"${SHARED_DATE_FILE}"' && /usr/bin/curl --silent https://example-123.com/dts/inrs?format=csv > '"${SHARED_DATE_FILE}"
- 对URL中的问号进行转义:
检查代理服务器上的curl是否正常存在
虽然原脚本之前能用,但不排除代理服务器上的curl被意外卸载、移动,或者执行权限发生了变化。可以执行这条命令检查:ssh ${PROXY_SERVER} "ls -l /usr/bin/curl"如果返回“No such file or directory”,说明curl被卸载或移动了,需要重新安装curl,或者找到新的路径替换;如果权限显示不对(比如没有执行权限),可以用
chmod +x /usr/bin/curl修复权限(需要代理服务器的管理员权限)。
内容的提问来源于stack exchange,提问作者ImSahil
相关产品推荐
相关产品推荐

