Goo*_*Doo 8 linux bash command-line
我有一个单行命令,它执行 curl 请求以检查服务器状态,然后将结果输出到日志文件。但问题是返回的结果没有换行符,因此当命令下次写入日志文件时,日志文件会混乱。
curl -s "http://myserver.com/api?param=1¶m=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¶m=2"`" | sudo tee -a /var/log/myserver.log
Run Code Online (Sandbox Code Playgroud)
或者,您可以尝试该-w选项,但我发现它会以某种方式将有趣的字符打印到控制台(但幸运的是不会打印到文件):
curl -s "http://myserver.com/api?param=1¶m=2" -w "\n" | sudo tee -a /var/log/myserver.log
Run Code Online (Sandbox Code Playgroud)
最简单的就是使用附加换行符 echo
curl -s "http://myserver.com/api?param=1¶m=2" | sudo tee -a /var/log/myserver.log && echo "" >> /var/log/myserver.log
Run Code Online (Sandbox Code Playgroud)
我用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\\n为echo,但例如x=-nene;echo "$x"不会在 Bash 中打印任何内容(除非xpg_echo启用了 POSIX 模式)。