将换行符附加到命令输出

Goo*_*Doo 8 linux bash command-line

我有一个单行命令,它执行 curl 请求以检查服务器状态,然后将结果输出到日志文件。但问题是返回的结果没有换行符,因此当命令下次写入日志文件时,日志文件会混乱。

curl -s "http://myserver.com/api?param=1&param=2" | sudo tee -a /var/log/myserver.log
Run Code Online (Sandbox Code Playgroud)

我喜欢将其保留为单行命令。欢迎任何建议。感谢您的时间。

Ste*_*del 12

使用echo,它会自动追加一个换行符:

echo "`curl -s "http://myserver.com/api?param=1&param=2"`" | sudo tee -a /var/log/myserver.log
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试该-w选项,但我发现它会以某种方式将有趣的字符打印到控制台(但幸运的是不会打印到文件):

curl -s "http://myserver.com/api?param=1&param=2" -w "\n" | sudo tee -a /var/log/myserver.log
Run Code Online (Sandbox Code Playgroud)


sus*_*tus 6

最简单的就是使用附加换行符 echo

curl -s "http://myserver.com/api?param=1&param=2" | sudo tee -a /var/log/myserver.log && echo "" >> /var/log/myserver.log
Run Code Online (Sandbox Code Playgroud)

  • 试试`(curl -s "http://www.nexon.org.uk" && echo "") | 须藤 tee -a ...` (3认同)

Lri*_*Lri 5

我用awk 1它(其中1只是评估为 true 的东西):

$ printf a|awk 1
a
$ printf a\\n|awk 1
a
$ 
Run Code Online (Sandbox Code Playgroud)

它应该与 gawk、BWK awk / nawk(OS X 附带)和 mawk(Debian 附带)配合使用。sed -n p适用于 OS X 的 sed,但不适用于 GNU sed。

仅限 Bash 的替代方案:

printf %s\\n "$(cat)"
Run Code Online (Sandbox Code Playgroud)

请注意,这$()会删除末尾的所有换行符,因此echo $'a\n\n'|printf %s\\n "$(cat)"仅打印一个换行符。

您也可以替换printf %s\\necho,但例如x=-nene;echo "$x"不会在 Bash 中打印任何内容(除非xpg_echo启用了 POSIX 模式)。


lak*_*tak 5

添加-w "\n"开关或放置

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

进入你的~/.curlrc