首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示从命令中更改实时值的Bash脚本

显示从命令中更改实时值的Bash脚本
EN

Unix & Linux用户
提问于 2019-11-14 09:19:29
回答 9查看 9.8K关注 0票数 10

在Linux机器上,我有一系列提供不同传感器状态数值的命令。

这些命令的调用类似于以下内容:

代码语言:javascript
复制
$ command1
5647
$ command2
76
$ command3
8754

这些值是实时变化的,每次我想检查其中一个值的状态时,我必须重新启动命令.这对我没有任何好处,因为我需要双手来操纵硬件。

我的目标是创建一个简单的Bash脚本,该脚本调用这些命令并保持值更新(实时更新或每x秒刷新一次),如下所示:

代码语言:javascript
复制
$ ./myScript.sh
command1: x
command2: y
command3: z
command4: v

其中xyzv是不断变化的值。

巴什允许这简单有效吗?或者我应该选择用另一种语言,比如Python?

提供更多信息的UPDATE:

我现在的剧本是:

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

npe是一个返回数值的示例命令。我希望有这样的输出:

我使用命令watch -n x ./myScript.sh获得的输出,其中x是秒的刷新值。如果我像这样编辑我的脚本:

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

我用一个恼人的闪光灯得到我的输出:

EN

回答 9

Unix & Linux用户

回答已采纳

发布于 2019-11-14 09:30:47

在bash中实现实时解决方案可能比较棘手。

有许多方法可以在X秒内运行一次脚本,您可以使用watch。我想您已经有可用的myScript.sh了。用所需的秒数替换X。

  1. watch -n X ./myScript.sh
  2. while sleep X; do ./myScript.sh; done upd.为了模拟监视,您可能需要在迭代之间清除屏幕。在脚本中,它看起来是这样的:而睡眠X;清除;command1;command2;完成
  3. 将上面的一个选项添加到脚本本身。
票数 13
EN

Unix & Linux用户

发布于 2019-11-14 15:47:57

您可以使用tput cup 0 0将光标发送到屏幕的左上方。clear一次。

代码语言:javascript
复制
#!/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
票数 15
EN

Unix & Linux用户

发布于 2019-11-14 22:49:15

我假设闪烁是因为您的命令需要花时间返回它们的值。这是我通常的解决办法:

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

我们的想法是在最后可能的时刻清除屏幕。

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

https://unix.stackexchange.com/questions/552125

复制
相关文章

相似问题

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