在 shell 脚本中打印交互式命令的输出

在 shell 脚本中打印交互式命令的输出

echo我正在编写一个CGI脚本来监视系统状态,因此必须使用或将信息输出到终端cat。问题是,systat这是一个交互式命令,因此它不会在屏幕上打印任何内容。

我尝试了systat | echosystat | cat,但前者没有给出任何结果,而后者的行为与 相同systat

编辑

好吧,让我澄清一下。基本上,我要求一个 shell 脚本,比如monitor.sh.当使用 执行时./monitor.sh,它将启动一个新进程,输出 的结果systat,然后退出。

它应该看起来像这样:

root@HPC:~/playground # ./monitor.sh
                    /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
     Load Average   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 12.0

                    /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root@HPC:~/playground # 

答案1

systatFreeBSD 上的手册页说,

  • “全局”命令解释器处理所有键盘输入。
  • quit命令由“全局”命令解释器解释。它告诉systat我们退出。
    • quit命令可以缩写为 q
  • 可以在命令行上提供“显示命令”,前面带有-。 (没有明确说明是否quit符合“显示命令”的资格。)

所以,令人失望的是,这systat -q不起作用。其他要尝试的事情:

  • systat -quit
  • (sleep 5; echo quit) | systat
    • (您可能需要将其输入为sh -c '(sleep 5; echo quit) | systat'。)
    • 或者您可能需要执行(sleep 5; echo :quit) | systatsh -c '(sleep 5; echo :quit) | systat'。 (注意添加:.)
  • systat& sleep 5; kill "$!"
    • (您可能需要将其输入为sh -c 'systat& sleep 5; kill "$!"'。)

您可能需要调整睡眠时间才能获得您想要的结果。

相关内容