现象
shell脚本中使用curl命令出现下列错误:
* Illegal characters found in URL
* Closing connection -1
curl: (3) Illegal characters found in URL
原因
文本中含有\r
等换行符,curl识别文本时将\r
识别成了\
和r
两个字符
解决办法
-
方案一, 使用
vi
命令检查
例如:vi test.sh :set ff?
输入
:set ff?
前需要先按Esc键如果出现
fileforma=dos
那么就可以确定是这个问题
可以使用以下命令转换程序格式::set fileformat=unix :wq
按
Esc
输入:wq
命令保存 -
方案二, 使用
dos2unix <scriptname>
命令直接转换脚本格式为unix
例如:dos2unix test.sh
-
方案三, 直接删除链接文本中的
\r
字符
命令如下:URL=${URL%$'\r'}
例如:
URL=$(curl -i -X GET -H "X-Auth-User: MyUserna,e" -H "X-Auth-Key: MyAPIKey" "https://urlToAuthServer.tld/auth/v1.0/" | grep "X-Storage-Url:" | awk '{print $2}') URL=${URL%$'\r'} curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt
参考
1. https://stackoverflow.com/questions/35018899/using-curl-in-a-bash-script-and-getting-curl-3-illegal-characters-found-in-ur/62223019#62223019
2. http://oublog.cn/vps/linuxvps/259.html
3. https://www.nuomiphp.com/eplan/339794.html