在卷曲响应主体的末端自动添加换行符


234

如果curl请求的HTTP响应正文不包含结尾的换行符,那么我会遇到这种非常烦人的情况,其中shell提示位于行的中间,并且转义已被弄得很乱,以至于当我放置最后一个curl时屏幕上的命令,从该curl命令中删除字符会删除错误的字符。

例如:

[root@localhost ~]# curl jsonip.com
{"ip":"10.10.10.10","about":"/about"}[root@localhost ~]#

我可以使用一种技巧在卷曲响应的末尾自动添加换行符,以使提示返回到屏幕的左边缘吗?


无论我的cygwin安装版本具有任何版本的curl,这些答案都对我不起作用。仅将整个curl命令包装在echo语句中,例如echo "$(curl localhost:8001/api)",请回答以下问题:unix.stackexchange.com/a/217611/110338
Alex Hall

Answers:


418

从man文件中:

为了更好地允许脚本程序员了解curl的进度,引入了-w /-write-out选项。使用此功能,您可以指定要从先前的传输中提取哪些信息。

要显示下载的字节数以及一些文本和结尾的换行符:

curl -w 'We downloaded %{size_download} bytes\n' www.download.com

因此,请尝试将以下内容添加到您的~/.curlrc文件中:

-w "\n"

46
您可以运行以下命令为您执行此操作:echo '-w "\n"' >> ~/.curlrc
tbraun

5
我总是-w "\n"手动向每个curl命令添加,并且TIL ~/.curlrc存在!
卓卓云

2
在Windows上的git-bash下这可能不起作用;我说-w "\nKLJLJKLJ LJKLLKJ"~/.curlrc就跑卷曲,得到了既不是新行或怪异字符。
jcollum

@jcollum某些Windows端口优先_.。您可能正在寻找卷发~/_curlrc,因此echo '-w "\n"' >> ~/_curlrc可能会起作用。它为我做。顺便说一句:curl将抱怨未转义的空格
user1129682

将命令行与修改一起使用-w "\n"或附加; echo在修改上很有用.curlrc。如果您修改curlrc,如果某些脚本在响应数据的末尾不处理换行符,则可能会中断。我个人会在修改rc时坚持在命令行上添加其他内容。
詹森

99

尝试:

curl jsonip.com; echo 

输出值

{"ip":"x.x.x.x","about":"/about"}

这就是这么简单;)

(并且不仅限于curl命令,而是所有不以换行符结尾的命令)


3
有什么办法可以将其包装在脚本或bash别名中或类似的东西中?在每一行的末尾键入“; echo”可能会很乏味,我觉得应该可以以某种方式将其自动化。
马修·G

在SO上,最好提供一些搜索工作。很明显找到如何将其放入别名或脚本中。
吉尔·奎诺

2
请注意,添加echo命令会清除curl命令的退出代码。在最流行的答案中建议的-w“ \ n”选项卷曲,使卷曲退出代码可用于检查。
bradoaks

14

有关更多信息以及卷曲后的干净新行

~/.curlrc

-w "\nstatus=%{http_code} %{redirect_url} size=%{size_download} time=%{time_total} content-type=\"%{content_type}\"\n"

(更多选项在这里可用)

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&amp;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"
~ ➤  

编辑,为了使内容更易读,您可以-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)

1

bash的一般解决方案是在命令提示符下添加换行符:

请参阅相关问题(如何在bash提示前使用换行符? )和相应的答案

该解决方案不仅覆盖curl,而且覆盖每个命令。

echo $PS1 # To get your current PS1 env variable's value aka '_current_PS1_'
PS1='\n_current_PS1_'

唯一的副作用是,每第二行之后都会出现命令提示符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.