在同一行记录日期和ansiweather的输出

时间:2019-04-26 14:15:10

标签: shell logging io-redirection

我在macOS上安装了ansiweather,我想每天使用cronjob记录几次天气。

这是我的代码:

date +%Y-%m-%d--%H:%M && ansiweather -l  Amsterdam,NL -s true -h false -p false >> test.txt

当我查看我的test.txt文件时,只看到ansiweather结果,而不是日期。

我想要一个日志文件,该文件在每行上显示日期[空格] [ansiweather详细信息]。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

用虚拟命令替换您的命令:

$ echo 1 && echo 2 >> out.txt
1

这会将第一个命令的输出打印到标准输出,并将第二个命令的输出重定向到out.txt

要将它们都重定向,请将它们分组:

{ echo 1 && echo 2; } >> out.txt

但这只是解决方案的一半; out.txt将包含

1
2

在单独的行上。

要在一行上获得输出,可以使用printf

printf '%s %s\n' "$(echo 1)" "$(echo 2)" >> out.txt

包含out.txt

1 2

应用于您的实际命令:

printf '%s %s\n' \
    "$(date '+%F--%R')" \
    "$(ansiweather -l  Amsterdam,NL -s true -h false -p false)" >> test.txt

请注意,+%Y-%m-%d--%H:%M可以缩写为'%F--%R'(至少对于GNU date和标准macOS date而言; POSIX既不需要%F也不需要或%R)。