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

时间:2012-10-11 22:32:44

标签: curl

如果curl请求的HTTP响应主体不包含尾随换行符,那么我最终会遇到这个非常烦人的情况,其中shell提示符位于行的中间,并且当我放置时,转义被搞砸了很多屏幕上的最后一个curl命令,删除该curl命令中的字符会删除错误的字符。

例如:

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

我是否可以使用一种技巧在卷曲响应结束时自动添加换行符,以便将提示重新放回屏幕的左边缘?

5 个答案:

答案 0 :(得分:339)

来自man文件:

  

更好地让脚本程序员了解进度   卷曲,-w / - 写出选项被引入。使用此,您可以指定   您要提取的上一次转移中的哪些信息。

     

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

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

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

-w "\n"

答案 1 :(得分:83)

试试:

curl jsonip.com; echo 

<强>输出

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

这是 简单;)

(并且不限于curl命令,但所有未使用换行符完成的命令)

答案 2 :(得分:8)

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

<强> ~/.curlrc

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

(有更多选项here

如果请求未被重定向或您使用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"
~ ➤  

编辑,为了让事情更具可读性,您可以将ANSI颜色添加到-w行,直接编写并不容易,但this脚本可以生成{ {1}}带有颜色的文件。

~/.curlrc

答案 3 :(得分:0)

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

请参阅相关问题(How to have a newline before bash prompt? )和相应的answer

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

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

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

答案 4 :(得分:0)

我设法动态添加了一个新行,以在命令输出末尾没有新行时进行提示。因此它不仅适用于 curl,还适用于任何其他命令。

# https://github.com/dylanaraps/pure-bash-bible#get-the-current-cursor-position
new_line_ps1() {
  local _ y x _
  local LIGHT_YELLOW="\001\033[1;93m\002"
  local     RESET="\001\e[0m\002"

  IFS='[;' read -p $'\e[6n' -d R -rs _ y x _
  if [[ "$x" != 1 ]]; then
    printf "\n${LIGHT_YELLOW}^^ no newline at end of output ^^\n${RESET}"
  fi
}

PS1="\$(new_line_ps1)$PS1"

我在 UL 网站上的回答:https://unix.stackexchange.com/a/647881/14907