【发布时间】:2016-08-13 20:39:39
【问题描述】:
我正在尝试在 Raspberry Pi 中实现此温度记录(尽管某些代码不起作用,因此我使用了稍微不同的解决方案):
https://www.raspberrypi.org/learning/temperature-log/worksheet/
我一直坚持将结果写入文件。我想创建一个名称包含实际日期的文件,例如temperature_log_2016_08_13.txt
运行脚本时,每次执行带有回显命令的行时,我都会收到一个不明确的重定向错误。我尝试了各种带引号、双引号、不带引号的组合。请指教。
#!/bin/bash
timestamp() {
date +%F_%H-%M-%S
}
temperature() {
/opt/vc/bin/vcgencmd measure_temp
}
temp=$(temperature)
temp2=${temp:5:9}
echo Temperature Log_$(date) >/home/pi/logs/temperature_log_$(date).txt
for i in {1..5}
do
echo ${temp2} $(timestamp) >>/home/pi/logs/temperature_log_$(date).txt
sleep 1
done
更新:通过将文件名放在引号之间,如下所示,不明确的重定向错误消失了,而是脚本生成了 5 个名称中包含日期/时间戳的文件。我只需要 1 个将所有温度都写入其中的文件。
【问题讨论】:
-
将
>filename或>>filename放在命令上会在该命令之前打开该文件,并在命令完成后关闭它。与只打开一次文件并在多个命令中重用该句柄相比,一遍又一遍(或在循环内)执行此操作非常低效。 -
...例如,如果您只将
exec >"/home/pi/logs/temperature_log_$(date).txt"放在脚本的顶部一次,您将both避免名称在执行,并且也避免了一遍又一遍地重新打开文件的低效率。
标签: bash shell date redirect ambiguous