带有管道的 Cat 命令在 bash 中工作但不在脚本中
Cat command with pipe working in bash but not in script
非常简单的脚本,但我卡住了。
它连接到电池平衡器,将信息输出到 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
从 shell 它按预期工作:
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"
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
是错误的。顺便说一句,你可以将上面的简化为:
jkbms -p 3C:A5:19:7B:28:09 -o json|tee /home/bms/batt.log|jq -r '.highest_cell_voltage'
If I need to print the output of the comand on the screen, how do i do it without using echo?
如果您想要 /home/bms/batt.log
中保存的输出,您可以随时 cat /home/bms/batt.log
。
如果你想仅在执行时在屏幕上打印命令的输出,你可以tee /dev/tty
而不是tee /home/bms/batt.log
。
如果在执行时你想在屏幕上和日志文件中输出,你可以 tee /home/bms/batt.log /dev/tty
一次。
非常简单的脚本,但我卡住了。
它连接到电池平衡器,将信息输出到 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
从 shell 它按预期工作:
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"
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
是错误的。顺便说一句,你可以将上面的简化为:
jkbms -p 3C:A5:19:7B:28:09 -o json|tee /home/bms/batt.log|jq -r '.highest_cell_voltage'
If I need to print the output of the comand on the screen, how do i do it without using echo?
如果您想要 /home/bms/batt.log
中保存的输出,您可以随时 cat /home/bms/batt.log
。
如果你想仅在执行时在屏幕上打印命令的输出,你可以tee /dev/tty
而不是tee /home/bms/batt.log
。
如果在执行时你想在屏幕上和日志文件中输出,你可以 tee /home/bms/batt.log /dev/tty
一次。