linux - 在 bash 脚本中使用 curl 并获取 curl : (3) Illegal c

所以我有一个非常简单的 bash 脚本,它正在 curl 到身份验证服务器以获取 header 。 header url 被写入一个 var,然后在下一个 curl 调用中使用。在第一个 curl 调用中使用 var 集时,我得到“curl:(3)在 URL 中发现非法字符”。我能够回显 var 并且一切看起来都很好,我什至可以重置 var(在下面的示例中)并且它可以工作。

Bash 脚本

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}')

curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt

运行上述示例时,我得到:

curl: (3) Illegal characters found in URL

网址变量如下所示(无非法字​​符)

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534

当我在终端中执行此操作时,它可以工作:

$ 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}')

$ echo $URL

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534

现在我复制并粘贴字符串并将其重新分配到 URL,就像这样(再次全部在终端中):

>$ URL="https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534"
>$ curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt

有效。

那么为什么在第一个示例中出现“curl: (3) Illegal characters found in URL”错误?

更新 我跑了这个: printf %s "$URL"| xxd

这是输出(地址改了,你明白了)

0000000: 6874 7470 733a 2f2f 6461 6c30 352e 6f62  https://server.ob
0000010: 6a65 6374 7374 6f72 6167 652e 736f 6674  jectstorage.lite
0000020: 6c61 7965 722e 6e65 742f 7631 2f41 5554  sabers.com/v1/AUT
0000030: 485f 6665 3235 3339 3434 2d38 6433 322d  H_aE2563981-7d32-
0000040: 3432 3138 2d61 6566 632d 6665 6638 3465  4201-bdoi-fef94a
0000050: 6166 3331 6232 0d                        ag11c8.

最佳答案

$URL 的末尾包含 \r (CR) (0d)。删除它

URL=${URL%$'\r'}

在与 curl 一起使用之前。

关于linux - 在 bash 脚本中使用 curl 并获取 curl : (3) Illegal characters found in URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018899/

相关文章:

linux - shell 脚本 : Run function from script over s

linux - 是否可以使用 shell 脚本递归地创建文件夹?

linux - Hadoop:«错误:未设置 JAVA_HOME»

linux - 如何获取自上次使用 bash 修改文件以来的时间(以秒为单位)?

c++ - 在 64 位 Linux 操作系统上编译 32 位程序导致 fatal error

linux - yum 可以告诉我哪些存储库提供了特定的包吗?

linux - 仅当变量包含特定字符串时才运行 Ansible 任务

linux - 为什么使用 dd 克隆磁盘时使用 conv=notrunc?

python - 如何从 subprocess.Popen() 获取输出。 proc.stdout.

linux - 导出在我的 shell 脚本中不起作用