web-dev-qa-db-ja.com

git-bashのcurlコマンド

Bashで記述され、Linux(CentOS 7)およびMacOSで動作するテスト済みのスクリプトがあります。このスクリプトは、cURLを使用してREST API準拠のデータプラットフォーム(XNAT)と対話します。

WindowsユーザーがGit for Windowsに同梱されているgit-bash内で同じスクリプトを使用できることを望んでいました。残念ながら、git-bashでcURLを使用すると問題があるようです。

cURLの最初の使用は、JSESSION Cookieを取得することです。

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

Linuxでは、これはユーザーにパスワードを要求し、CookieをCOOKIEに保存します。 git-bashでは、コマンドの発行は、「ctrl + C」を使用して中断するまでハングします。奇妙なことに、パスワードのクエリメッセージが表示されますが、遅すぎてスクリプトが終了しました。

これはCRまたはLFの問題に関係しているのではないかと疑っていますが、これに関して理解している情報が見つかりません。

どんなポインターでも歓迎です!

ありがとうございました

EDIT:次のようなコマンドでパスワードを渡すと、上記のコマンドは正常に動作するようです:

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

ただし、ここで指摘されているように、 ユーザー名とパスワードでcURLを使用しますか? ユーザーがコマンド引数としてパスワードを入力するのは避けたいです。

したがって、質問は「最初のコマンドを使用するときにcURLがパスワードの入力を求めないのはなぜですか」 Windowsのgit-bashの場合、そのコマンドはLinuxまたはMacOSで期待どおりに動作します:

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

私自身の質問に返信することになりましたが、これが他の誰かに役立つかもしれません。

この問題は、このスレッドによると、git-bash内からcURLを実行する場合の既知の問題であると思われます。 https://github.com/curl/curl/issues/57

特に、dschoの回答を参照してください30 Dec 2015

問題は、Git for Windows 2.5、MinTTY以降、Git Bashで使用するターミナルエミュレーターです。このターミナルエミュレータはWin32コンソールに関連付けられていないため、cURLが上記のコンソールを介してユーザーと対話する場合、ユーザーには何も表示されません。

この問題には回避策があります。回避策は次のとおりです。 https://github.com/git-for-windows/build-extra/blob/master/ReleaseNotes.md#known-issues

回避策は、次のようにwinptyを介してcurlを実行することです:winpty curl [arguments]

結局、CRLFの問題ではありません。

Soooo、git-bashはmagic-bullet(tm)でなくてもWindowsでbashスクリプトを簡単に実行できます。はぁ...

6
Cyril