より少ないまたはより多くのパイピングでカール要求を検証できないのはなぜですか?

より少ないまたはより多くのパイピングでカール要求を検証できないのはなぜですか?

(セントOS 7)

このようなカールコマンドを試してみると、curl -u elastic -X GET 'http://localhost:9200/*' | more1文字だけを入力した後にEnterキーを押したかのようにコマンドが実行され、認証に失敗することがわかりました。

これは普通ですか?

ファイルにリダイレクトしたり、上にスクロールしたり、wgetを使用したり(まだ試していない)コマンドにパスワードを入力したりできますが、ここで何が起こっているのかを知りたいです。

ベストアンサー1

問題は、curlとがmore同時に同じTTYから読み取ることです。また、すべてTTY設定を変更できます。curl入力したパスワードは画面に表示しないでください。moreこれは基本的な行ベースの入力ではなく文字ベースの入力が必要なためです。

これが発生しないようにするには、コマンドが出力の生成を開始するmoreまでコマンドの開始を遅らせることができると思います。curl私はこれを行う標準コマンドがわかりませんが、2行のPythonコードで実行できます。

#!/usr/bin/python
import select
select.select([0], [], [])

上記のPythonスクリプトを使用して、元のコマンドを次のように変換できます。

curl -u elastic -X GET 'http://localhost:9200/*' | ( ./wait.py ; more )

おすすめ記事