首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cat命令,管道在bash中工作,但在脚本中不工作。

Cat命令,管道在bash中工作,但在脚本中不工作。
EN

Stack Overflow用户
提问于 2021-04-04 08:25:38
回答 1查看 181关注 0票数 0

剧本很简单,但我被卡住了。

它连接到电池平衡器,将信息发送到json格式的文件中。然后,我有一个管道,输出到jq,以获得我需要的信息。它在bash shell中工作,但在脚本中不起作用:

下面是脚本:

代码语言:javascript
复制
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行在脚本输出中显示了这一点:

代码语言:javascript
复制
Checking battery voltages
parse error: Invalid numeric literal at line 1, column 4
done

在外壳中,它的工作方式与预期的一样:

代码语言:javascript
复制
cat /home/bms/batt.log | jq -r '.highest_cell_voltage'
4.152044773101807

我试着用引号等将整个cat命令附在一起,但我感到不知所措。

然而,这样做是可行的:

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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是错误的。顺便说一句,您可以将上面的内容简化为:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66939306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档