bal*_*lon 9 linux shell scripting bash shell-script
在 Linux 机器上,我有一系列命令提供不同传感器状态的数值。
这些命令的调用类似于以下内容:
$ command1
5647
$ command2
76
$ command3
8754
Run Code Online (Sandbox Code Playgroud)
这些值实时变化,每次我想检查其中一个的状态时,我都必须重新启动命令......这对我没有任何好处,因为我需要双手来操作硬件。
我的目标是制作一个简单的 Bash 脚本来调用这些命令并保持值更新(实时异步或每 x 秒刷新一次值),如下所示:
$ ./myScript.sh
command1: x
command2: y
command3: z
command4: v
Run Code Online (Sandbox Code Playgroud)
其中x,y,z和v正在变化值。
Bash 允许这简单有效吗?还是我应该选择用另一种语言来做,比如 Python?
更新更多信息:
我目前的脚本是:
#!/bin/bash
echo "Célula calibrada: " $(npe ?AI1)
echo "Anemómetro: " $(npe ?AI2)
echo "Célula temperatura: " $(npe ?AI3)
echo "Célula temperatura: " $(npe ?AI4)
Run Code Online (Sandbox Code Playgroud)
npe作为返回数值的示例命令。我期待这样的输出:
我用命令得到的这个输出watch -n x ./myScript.sh,其中x是秒的刷新值。如果我像这样编辑我的脚本:
#!/bin/bash
while sleep 1; do
clear; # added to keep the information in the same line
echo "Célula calibrada: " $(npe ?AI1);
echo "Anemómetro: " $(npe ?AI2);
echo "Célula temperatura: " $(npe ?AI3);
echo "Célula temperatura: " $(npe ?AI4);
done
Run Code Online (Sandbox Code Playgroud)
我的输出带有恼人的闪烁:
gle*_*man 15
您可以使用tput cup 0 0将光标向上发送到屏幕的左上角。clear一次。
#!/bin/bash
clear
while sleep 1; do
tput cup 0 0
printf "%21s %6d \n" \
"Célula calibrada: " $(npe ?AI1) \
"Anemómetro: " $(npe ?AI2) \
"Célula temperatura: " $(npe ?AI3) \
"Célula temperatura: " $(npe ?AI4)
done
Run Code Online (Sandbox Code Playgroud)
rus*_*ush 13
在 bash 中实现实时解决方案可能很棘手。
您可以使用多种方法在 X 秒内运行一次脚本watch。我假设你已经myScript.sh可用了。用您需要的秒数替换 X。
watch -n X ./myScript.sh
while sleep X; do ./myScript.sh; done
更新。要模拟手表,您可能希望在迭代之间清除屏幕。在脚本中,它看起来像这样:
while sleep X; do
clear;
command1;
command2;
done
Run Code Online (Sandbox Code Playgroud)将上述选项之一添加到脚本本身。
bxm*_*bxm 10
我假设闪烁是因为您的命令需要一些时间来返回它们的值。这是我通常的解决方法:
cmds(){
echo "Célula calibrada: " $(npe ?AI1);
echo "Anemómetro: " $(npe ?AI2);
echo "Célula temperatura: " $(npe ?AI3);
echo "Célula temperatura: " $(npe ?AI4);
}
while true; do
out="$(cmds)"
clear
echo "$out"
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
这个想法是我们在最后可能的时刻清除屏幕。
如果您clear紧跟在 之后sleep,而不是紧接在之前,您将能够更轻松地阅读输出:
#!/bin/sh
while sleep 1
do
clear
echo "Célula calibrada: " $(npe ?AI1)
echo "Anemómetro: " $(npe ?AI2)
echo "Célula temperatura: " $(npe ?AI3)
echo "Célula temperatura: " $(npe ?AI4)
done
Run Code Online (Sandbox Code Playgroud)
但是,我会删除这里的循环,并用于watch重复运行脚本。这是单个工具的更灵活组合。
| 归档时间: |
|
| 查看次数: |
5377 次 |
| 最近记录: |