剧本很简单,但我被卡住了。
它连接到电池平衡器,将信息发送到json格式的文件中。然后,我有一个管道,输出到jq,以获得我需要的信息。它在bash shell中工作,但在脚本中不起作用:
下面是脚本:
echo "Checking battery voltages"
jkbms -p 3C:A5:19:7B:28:09 -o json > /home/bms/batt.log
echo cat /home/bms/batt.log | jq -r '.highest_cell_voltage'
echo "done"cat行在脚本输出中显示了这一点:
Checking battery voltages
parse error: Invalid numeric literal at line 1, column 4
done在外壳中,它的工作方式与预期的一样:
cat /home/bms/batt.log | jq -r '.highest_cell_voltage'
4.152044773101807我试着用引号等将整个cat命令附在一起,但我感到不知所措。
然而,这样做是可行的:
echo "Checking battery voltages"
jkbms -p 3C:A5:19:7B:28:09 -o json > /home/bms/batt.log
batt=$(cat /home/bms/batt.log)
echo $batt | jq -r '.highest_cell_voltage'
#echo /usr/bin/cat /home/bms/batt.log
echo "done"发布于 2021-04-04 08:58:30
jkbms -p 3C:A5:19:7B:28:09 -o json >/home/bms/bar.log回波猫/home/bms/bar.log jq -r '.highest_cell_voltage‘.highest_cell_voltage
这里的echo是错误的。顺便说一句,您可以将上面的内容简化为:
jkbms -p 3C:A5:19:7B:28:09 -o json|tee /home/bms/batt.log|jq -r '.highest_cell_voltage'--如果我需要在屏幕上打印comand的输出,我如何不使用echo来实现它?
如果您想要在/home/bms/batt.log中保存的输出,您可以随时cat /home/bms/batt.log。
如果只希望在执行时在屏幕上打印comand的输出,则可以使用tee /dev/tty而不是tee /home/bms/batt.log。
如果在执行时希望将输出显示在屏幕上以及日志文件中,则可以立即进行tee /home/bms/batt.log /dev/tty。
https://stackoverflow.com/questions/66939306
复制相似问题