Curl

為什麼在管道到更少或更多時無法驗證 curl 請求?

  • October 1, 2017

(CentOS 7)

當我嘗試像 curl 這樣的命令curl -u elastic -X GET 'http://localhost:9200/*' | more時,我發現在只輸入一個字母后,該命令就像我按下了輸入一樣執行,並且無法進行身份驗證。

這是正常的嗎?

我可以重定向到一個文件,或者只是向上滾動,甚至可以使用 wget(還沒有嘗試過),或者甚至將我的密碼輸入到命令中,但我想知道這裡發生了什麼。

問題是curl兩者more都同時從同一個 TTY 讀取。此外,他們可能都在更改 TTY 設置;curl因為您輸入的密碼不應該顯示在螢幕上。因為它需要基於字元的輸入,而more不是預設的基於行的輸入。

為了防止這種情況發生,我認為您只需要延遲啟動more命令,直到curl命令開始產生輸出。我不知道執行此操作的標準命令,但可以使用兩行 Python 程式碼來完成。

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

使用上面的 Python 腳本,您可以嘗試原始命令的這種變體:

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

引用自:https://unix.stackexchange.com/questions/395525