无法通过SSH在远程屏幕会话中redirectSTDOUT

我想通过SSH /屏幕执行长时间运行的命令,并将输出redirect到一个文件。 我能够很好地运行命令(类似于这个问题 ),但输出永远不会显示出来。

这是我目前的命令:

ssh user@host screen -dm "ping -c 20 -i 5 localhost > /tmp/ping.out" 

在远程主机上,我可以看到会话:

 > screen -ls There is a screen on: 4530..com001 (Detached) 1 Socket in /var/run/screen/S-root. 

并附上查看实时输出,如预期与ping命令终止完成:

 PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.060 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.071 ms .. 

除了文件redirect之外,所有事情都做得很好:本地主机上的ssh立即断开连接,命令在远程主机上的屏幕会话中运行(我可以连接到屏幕会话并看到我的ping正在运行),屏幕一旦ping命令完成,会话就会终止。 甚至在远程主机上创build/tmp/ping.out文件! 但显示屏保持在屏幕会话,而不是redirect到文件。

我在这里错过了什么?

(顺便说一句,ping只是为了testing,最后我想暂停一个1-2分钟的tcpdump,并在后台收集输出以排除故障)。

屏幕“输出”并不完全是你所期望的,因为它被devise成一个多路复用器。 你正在寻找的命令是:

 ssh user@host screen -d -m "sh -c 'ping -c 20 -i 5 localhost > /tmp/ping.out'" 

这个命令会产生一个新的shell和工作。