我有一个单行命令,它执行 curl 请求来检查服务器状态,然后将结果输出到日志文件。但问题是返回的结果没有换行符,因此当命令下次写入日志文件时,日志文件会混乱。
curl -s "http://myserver.com/api?param=1¶m=2" | sudo tee -a /var/log/myserver.log
我喜欢将其保留为单行命令。欢迎提出任何建议。感谢您的时间。
答案1
使用echo
,它将自动添加换行符:
echo "`curl -s "http://myserver.com/api?param=1¶m=2"`" | sudo tee -a /var/log/myserver.log
或者,您可以尝试该-w
选项,但我发现它会以某种方式将有趣的字符打印到控制台(但幸运的是不会打印到文件中):
curl -s "http://myserver.com/api?param=1¶m=2" -w "\n" | sudo tee -a /var/log/myserver.log
答案2
最简单的方法是使用以下方法添加换行符echo
curl -s "http://myserver.com/api?param=1¶m=2" | sudo tee -a /var/log/myserver.log && echo "" >> /var/log/myserver.log
答案3
我用awk 1
它来表示(其中1
只是一些计算结果为真的东西):
$ printf a|awk 1
a
$ printf a\\n|awk 1
a
$
它应该与 gawk、BWK awk/nawk(OS X 自带)和 mawk(Debian 自带)一起使用。可以sed -n p
与 OS X 的 sed 一起使用,但不能与 GNU sed 一起使用。
仅限 Bash 的替代方案:
printf %s\\n "$(cat)"
请注意,$()
从末尾删除所有换行符,例如echo $'a\n\n'|printf %s\\n "$(cat)"
仅打印一个换行符。
您也可以printf %s\\n
用替换echo
,但例如x=-nene;echo "$x"
在 Bash 中不会打印任何内容(除非xpg_echo
启用了 POSIX 模式)。
答案4
使用 echo 的其他语法:
commands... | { cat; echo; } | ...