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

Linux 如何从bash脚本中退出warn top命令的交互模式,linux,bash,shell,scripting,linux-mint,Linux,Bash,Shell,Scripting,Linux Mint,我有一个服务器上的bash脚本。此脚本将ssh连接到serverB并运行Thread top命令,提取度量值并将其放入serverA上的文件(test.txt)中。下面是我正在使用的命令: ssh -oStrictHostKeyChecking=no -i <key> username@hostname "yarn top" | head -5 | grep -w 'Applications' | awk '{print "Pending_apps&qu

我有一个服务器上的bash脚本。此脚本将ssh连接到serverB并运行Thread 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
ssh-oStrictHostKeyChecking=no-iusername@hostname“纱线顶部”|头部-5 | grep-w“应用程序”| awk“{打印“待定应用程序”\t“$7}”>>test.txt
所以这里的问题是,在我的脚本运行到命令之上之后,它进入了交互模式,只有在我手动发出Ctrl+C或退出信号/命令时它才会退出


在运行上述命令并将输出重定向到test.txt之后,脚本是否可以通过任何方式移动到下一个命令。也就是说,在命令提示符下运行上述命令后,它应该将输出重定向到test.txt文件,然后应该返回到命令提示符/terminal

Classic
top
可以通过
top-n1
在非交互模式下运行,不幸的是,我找不到
warn 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-oStrictHostKeyChecking=no-iusername@hostname“纱线顶部”|头部-5 | grep-w“应用程序”| awk“{打印“待定应用程序”\t“$7}”>>test.txt&PID=$!;睡眠1;kill-s SIGINT$PID

希望ssh传输SIGINT成功

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

(sleep $SLEEP_TIME; echo -e "q\n\n") | yarn top > yarn-top.log
它的意思是:“运行纱线顶部,并行地等待
SLEEP\u TIME
,然后输出q和两条新行”

只要
SLEEP\u TIME
小于
warn top
上的默认刷新延迟(默认为3秒),您将在
warn top.log
中获得一次屏幕更新。如果将
SLEEP\u TIME
设置为大于刷新延迟,则在
SLEEP\u TIME
期间,您将获得与其运行时间相同的更新

您需要
echo-e
来转义换行符。您需要它们,因为
warn top
是用java实现的。请参见
纱线顶部--help

  • 由于该工具是用Java实现的,所以必须按Enter键才能处理按键

  • 在后台运行命令时,我仍然无法进入命令提示符。请告诉我如何使用上面的ssh命令将输出发送到test.txt并返回到命令提示符。