如果curl请求的HTTP响应主体不包含尾随换行符,我最终会遇到这个非常烦人的情况,其中shell提示符位于行的中间,并且当我放入最后一个卷曲时,转义被搞砸了.屏幕上的命令,删除该curl命令中的字符删除错误的字符.
例如:
[root@localhost ~]# curl jsonip.com
{"ip":"10.10.10.10","about":"/about"}[root@localhost ~]#
Run Code Online (Sandbox Code Playgroud)
有没有一个技巧可以用来在卷曲响应结束时自动添加换行符,以便在屏幕左边缘提示回来?
Dav*_* J. 375
从man文件:
为了更好地让脚本程序员了解curl的进度,引入了-w/ - write-out选项.使用此选项,您可以指定要从中提取的先前传输中的哪些信息.
要显示与一些文本和结束换行符一起下载的字节数:
Run Code Online (Sandbox Code Playgroud)curl -w 'We downloaded %{size_download} bytes\n' www.download.com
因此,请尝试在~/.curlrc
文件中添加以下内容:
-w "\n"
Run Code Online (Sandbox Code Playgroud)
Gil*_*not 90
试试看:
curl jsonip.com; echo
Run Code Online (Sandbox Code Playgroud)
OUTPUT
{"ip":"x.x.x.x","about":"/about"}
Run Code Online (Sandbox Code Playgroud)
就这么简单;)
(并且不限于curl命令,但所有未使用换行符完成的命令)
SCo*_*vin 13
有关更多信息以及卷曲后的干净新线
~/.curlrc
-w "\nstatus=%{http_code} %{redirect_url} size=%{size_download} time=%{time_total} content-type=\"%{content_type}\"\n"
Run Code Online (Sandbox Code Playgroud)
(这里有更多选项)
redirect_url
如果请求未被重定向或您使用-L
跟随重定向,则将为空.
示例输出:
~ ? curl https://www.google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.uk/?gfe_rd=cr&ei=FW">here</A>.
</BODY></HTML>
status=302 https://www.google.co.uk/?gfe_rd=cr&ei=FW size=262 time=0.044209 content-type="text/html; charset=UTF-8"
~ ?
Run Code Online (Sandbox Code Playgroud)
编辑,为了使事物更具可读性,你可以-w
在行中添加ANSI颜色,直接编写并不容易,但是这个脚本可以生成~/.curlrc
带颜色的文件.
#!/usr/bin/env python3
from pathlib import Path
import click
chunks = [
('status=', 'blue'),
('%{http_code} ', 'green'),
('%{redirect_url} ', 'green'),
('size=', 'blue'),
('%{size_download} ', 'green'),
('time=', 'blue'),
('%{time_total} ', 'green'),
('content-type=', 'blue'),
('\\"%{content_type}\\"', 'green'),
]
content = '-w "\\n'
for chunk, colour in chunks:
content += click.style(chunk, fg=colour)
content += '\\n"\n'
path = (Path.home() / '.curlrc').resolve()
print('writing:\n{}to: {}'.format(content, path))
path.write_text(content)
Run Code Online (Sandbox Code Playgroud)
小智 5
bash 的一般解决方案是在命令提示符中添加换行符:
请参阅相关问题(How to have a newline before bash提示? )和相应的答案
该解决方案涵盖了每个命令,而不仅仅是curl。
echo $PS1 # To get your current PS1 env variable's value aka '_current_PS1_'
PS1='\n_current_PS1_'
Run Code Online (Sandbox Code Playgroud)
唯一的副作用是在每第二行之后您都会收到命令提示符。