Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
734 views
in Technique[技术] by (71.8m points)

command line - Why does a cURL request return a percent sign (%) with every request in ZSH?

I've noticed that the return from any cURL request in ZSH ends in a %, for example:

$ curl http://textbelt.com/text -d number="555555555" -d message="hey"
=> { "success": true }%

Why is this character being added and is there a standard method for removing it?

note: ZSH is the only shell that I notice this occurring (tested in bash csh ksh sh tcsh zsh)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is a zsh feature that prints a percent-and-newline after a command completes if that command does not already include a newline at the end of its output. If zsh did not do this, you would either not ever notice the fact that the command didn't print a newline - or you'd see zsh's command prompt not start on the margin and think it was a bug in zsh.

Tools like curl religiously print whatever results they get from the source and should never spontaneously print a newline without being asked to. I see this behaviour most often with curl. If you are coding a tool that uses curl, you do of course have the option of adding in a newline yourself.

I suggest not adding a newline unless you really have to. In the case where you really want to add a newline, you can use a separate tool (echo for example) - but the easiest with curl is the "write-out" option:

$ curl http://api.macvendors.com/0015c7   
Cisco Systems, Inc%     
$ curl -w '
' http://api.macvendors.com/0015c7
Cisco Systems, Inc
$

From curl's man page:

   -w, --write-out <format>
          Make  curl  display  information  on stdout after a completed transfer. The format is a string that may contain plain text
          mixed with any number of variables. The format can be specified as a literal "string", or you can have curl read the  for-
          mat from a file with "@filename" and to tell curl to read the format from stdin you write "@-".

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...