Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

curl command in git-bash

I have a script written in bash and tested working in Linux (CentOS 7) and on MacOS. The script uses cURL to interact with a REST API compliant data platform (XNAT).

I was hoping that Windows users could use the same script within git-bash that comes packaged with Git for Windows. Unfortunately there seems to be an issue when using cURL in git-bash.

The first use I make of cURL is to retrieve a JSESSION cookie:

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

On Linux, this asks the user for password and stores the cookie in COOKIE. In git-bash, issuing the command hangs, until using a "ctrl + C" to interrupt it. Strangely at that point the query message for the password is displayed, but too late, the script has terminated.

I have a suspicion that this may have to do with CR or LF issues, but cannot find some info I understand regarding this.

Any pointers would be welcome !

Thank you

EDIT: It appears the above command works fine if I pass the password in the command like this:

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

However, as pointed here: Using cURL with a username and password? I would rather avoid having the user typing their password as a command argument.

So the question is now "why is cURL not prompting for a password when I use the first command?" when in git-bash on Windows, while that command behaves as expected in Linux or MacOS:

 COOKIE=`curl -k -u $USERNAME https://theaddress/JSESSION`
like image 764
Cyril Avatar asked Jun 06 '18 15:06

Cyril


People also ask

Can we run curl command in git bash?

The cURL command-line utility comes installed in most Unix Like operating systems, including Linux and Mac OS. But, the cURL command is not available on Microsoft Windows by default. To get cURL for Windows 10, we will use git bash shell which provides useful unix command line tools for Windows.

What is curl command in git?

Curl is a command-line tool for transferring data specified with URL syntax.

What does curl do in bash?

curl is a command-line utility for transferring data from or to a server designed to work without user interaction. With curl , you can download or upload data using one of the supported protocols including HTTP, HTTPS, SCP , SFTP , and FTP .


1 Answers

Ending up replying to my own question, hope this may be useful to someone else.

It appears this issue is a known problem when running cURL from within git-bash, according to this thread: https://github.com/curl/curl/issues/573

In particular, see the answer of dscho on 30 Dec 2015:

The problem is the terminal emulator we use with Git Bash since Git for Windows 2.5, MinTTY. This terminal emulator is not associated with a Win32 Console, therefore the user does not see anything when cURL wants to interact with the user via said Console.

This issue has a workaround, which is documented here: https://github.com/git-for-windows/build-extra/blob/master/ReleaseNotes.md#known-issues

The workaround is to run curl via winpty as follows: winpty curl [arguments]

Not an issue with CR or LF after all.

Soooo, git-bash may not be the magic-bullet (tm) to run my bash scripts in Windows with zero effort. Sigh...

like image 196
Cyril Avatar answered Oct 28 '22 04:10

Cyril