如何从bash脚本中退出yarn top命令的交互模式

时间:2018-08-07 14:27:03

标签: linux bash shell scripting linuxmint

我在serverA上有一个bash脚本。此脚本将SSH到serverB并运行yarn top命令,提取度量并放入serverA的文件(test.txt)中。下面是我正在使用的命令:

ssh -oStrictHostKeyChecking=no -i <key> username@hostname "yarn top" | head -5 | grep -w 'Applications' | awk '{print "Pending_apps" "\t" $7}' >> test.txt

所以这里的问题是,在我的脚本运行以上命令后,它进入交互模式,并且仅当我手动提供crtl + c或quit信号/命令时退出。

无论如何,在运行上述命令并将输出重定向到test.txt之后,脚本应该移至下一个命令。也就是说,在命令提示符下运行上述命令后,应将输出重定向到test.txt文件,然后应返回到命令提示符/终端

2 个答案:

答案 0 :(得分:0)

经典top可以通过top -n 1在非交互模式下运行不幸的是,我找不到yarn top的文档

或者您可以尝试在后台(&)中运行命令,保存其pid,等待数据并杀死它

ssh -oStrictHostKeyChecking=no -i <key> username@hostname "yarn top" | head -5 | grep -w 'Applications' | awk '{print "Pending_apps" "\t" $7}' >> test.txt & PID=$!; sleep 1; kill -s SIGINT $PID

希望ssh成功传输SIGINT

答案 1 :(得分:0)

您可以尝试通过管道echo的输出来模拟控制台,如下所示:

(sleep $SLEEP_TIME; echo -e "q\n\n") | yarn top > yarn-top.log

这意味着:“运行纱顶,并并行,等待SLEEP_TIME,然后输出q和两行新记录。”

只要SLEEP_TIME小于yarn top上的默认刷新延迟(默认为3秒),您将在yarn-top.log中获得一个屏幕更新。如果将SLEEP_TIME设置为大于刷新延迟,则将在SLEEP_TIME期间获得尽可能多的更新。

您需要echo -e才能转义换行符。您需要它们,因为yarn top是用Java实现的。参见yarn top --help

  
      
  1. 由于该工具是用Java实现的,因此必须按Enter键才能处理按键。
  2.