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

Kev*_*rke 208 curl

如果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选项.使用此选项,您可以指定要从中提取的先前传输中的哪些信息.

要显示与一些文本和结束换行符一起下载的字节数:

curl -w 'We downloaded %{size_download} bytes\n' www.download.com
Run Code Online (Sandbox Code Playgroud)

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

-w "\n"
Run Code Online (Sandbox Code Playgroud)

  • 您可以运行以下命令为您执行此操作:`echo'-w"\n"'>>〜/ .curlrc` (31认同)
  • 我总是手动为每个curl命令添加`-w"\n"`并且存在TIL`~/.curlrc`! (2认同)
  • 这可能不适用于Windows下的git-bash; 我将`-w"\nKLJLJKLJ LJKLLKJ"添加到我的`〜/ .curlrc`并运行卷曲并且既没有新行也没有奇怪的字符. (2认同)
  • 我会使用 shell 别名而不是修改 `~/.curlrc` 以防止脚本中断 (2认同)

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命令,但所有未使用换行符完成的命令)

  • 有没有办法将它包装在脚本或bash别名或类似的东西?在每一行的末尾键入"; echo"可能会变得乏味,我觉得这应该能够以某种方式自动化. (3认同)
  • 请注意,添加 echo 命令会清除 curl 命令的退出代码。最流行的答案中建议的 -w "\n" 卷曲选项使卷曲退出代码可供检查。 (2认同)

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&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"
~ ?  
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)

唯一的副作用是在每第二行之后您都会收到命令提示符。