git-bash 中的 curl 命令

Posted

技术标签:

【中文标题】git-bash 中的 curl 命令【英文标题】:curl command in git-bash 【发布时间】:2018-11-16 09:01:24 【问题描述】:

我有一个用 bash 编写的脚本,并在 Linux (CentOS 7) 和 MacOS 上进行了测试。该脚本使用cURL 与符合 REST API 的数据平台 (XNAT) 进行交互。

我希望 Windows 用户可以在 git-bash 中使用与 Git for Windows 一起打包的相同脚本。不幸的是,在 git-bash 中使用 cURL 时似乎存在问题。

我对@9​​87654324@ 的第一个用途是检索 JSESSION cookie:

COOKIE=`curl -k -u $USERNAME https://theaddress/JSESSION`

在 Linux 上,这会要求用户输入密码并将 cookie 存储在 COOKIE 中。 在 git-bash 中,发出命令会挂起,直到使用“ctrl + C”来中断它。奇怪的是,此时会显示密码查询消息,但为时已晚,脚本已终止。

我怀疑这可能与CRLF 问题有关,但找不到我了解的一些信息。

欢迎任何指点!

谢谢

编辑: 如果我在这样的命令中传递密码,上面的命令似乎可以正常工作:

COOKIE=`curl -k -u $USERNAME:$PASSWORD https://theaddress/JSESSION`

但是,正如这里所指出的: Using cURL with a username and password? 我宁愿避免让用户输入他们的密码作为命令参数。

所以现在的问题是“为什么在我使用第一个命令时cURL 没有提示输入密码?”在 Windows 上的 git-bash 中,而该命令在 Linux 或 MacOS 中的行为与预期相同:

 COOKIE=`curl -k -u $USERNAME https://theaddress/JSESSION`

【问题讨论】:

【参考方案1】:

最后回答我自己的问题,希望这对其他人有用。

根据此线程,从 git-bash 中运行 cURL 时,此问题似乎是一个已知问题: https://github.com/curl/curl/issues/573

特别是,请参阅 2015 年 12 月 30 日 dscho 的回答:

问题是我们在 Git Bash 中使用的终端模拟器,因为 Git for Windows 2.5,MinTTY。 此终端模拟器与 Win32 控制台无关,因此当 cURL 想通过所述控制台与用户交互时,用户看不到任何内容。

此问题有一个解决方法,在此处记录: https://github.com/git-for-windows/build-extra/blob/master/ReleaseNotes.md#known-issues

解决方法是通过 winpty 运行 curl 如下: winpty curl [arguments]

毕竟CRLF 不是问题。

太棒了,git-bash 可能不是 magic-bullet (tm) 以零努力在 Windows 中运行我的 bash 脚本。叹息……

【讨论】:

非常感谢提供错误链接....虽然解决方案真是太可惜了。

以上是关于git-bash 中的 curl 命令的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中使用 ProcessBuilder 读取输出 git-bash

在git-bash中使用指定编辑器打开文本文件

git-bash的alias别名设置

Windows端git-bash无法找到open命令,bash: open: command not found

来自 D 盘的 Visual Studio Code 中的 Git-Bash

从服务执行 git-bash.exe