为什么在管道传输到 less 或 more 时无法验证卷曲请求?

为什么在管道传输到 less 或 more 时无法验证卷曲请求?

(CentOS 7)

当我尝试像这样的curl命令时curl -u elastic -X GET 'http://localhost:9200/*' | more,我发现仅输入一个字母后,该命令就会执行,就像我按下了回车键一样,并且无法进行身份验证。

这是正常的吗?

我可以重定向到一个文件,或者只是向上滚动,甚至可以使用 wget (还没有尝试过),或者甚至将我的密码放入命令中,但我想知道这里发生了什么。

答案1

问题是curlmore都同时从同一个 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 )

答案2

# curl --help | grep -- ' -u'
 -u, --user USER[:PASSWORD]  Server user and password
# 

尝试:

curl --silent --user elastic:changeme --request GET localhost:9200/*?pretty | more

还有另一个解决方案:

# pass=changeme
# curl -I -u alexus:$pass https://X.X.X
HTTP/1.1 200 OK
Server: nginx/1.13.5
Date: Wed, 27 Sep 2017 17:27:19 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 2350
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: max-age=31536000
Last-Modified: Sun, 13 Aug 2017 18:21:51 GMT
Strict-Transport-Security: max-age=15768000

# 

还可以存储经过文件内的变量(不要忘记chmod 700该文件)并用于source在运行之前读取变量curl

瞧!

相关内容