基本上,我试图运行以下命令:
sshpass -p "xxx" ssh root@x.x.x.x "tail -f /tmp/messages | grep ptp4l" | cat -n > output.txt我试图让tmp/消息不断地写入本地文件,这样我们的一些技术人员就可以不断地监视来自其主服务器的IEEE 1588v2偏移,而不必了解他们正在访问的Gnu/Linux服务器的任何信息。
当我运行这个命令时,我根本没有输出到我的文件。
当我手动运行命令时:
tail -f /tmp/messages | grep ptp4l一切都很好,我一点问题也没有。我得到了我想要的输出。
我有遗漏什么吗?你不能通过引用的命令发送管道吗?
谢谢,斯蒂芬
发布于 2019-09-13 23:16:35
这是经典的“写到管道是完全缓冲”的问题。
尝试强迫您的ssh在远程计算机上使用-tt分配一个伪tty,或者使用--line-buffered选项到grep,如果它接受该选项。
ssh ... -tt </dev/null 'tail -f /tmp/messages | grep ptp4l' | cat -n > output.txt
ssh ... 'tail -f /tmp/messages | grep --line-buffered ptp4l' | cat -n > output.txt在远程计算机上分配tty时,</dev/null重定向是为了防止ssh干扰本地tty (将其置于原始模式),这是-t交换机的一个副作用。您可以使用不使用stdin的任何ssh命令(如果有必要,ssh客户端将打开/dev/tty来读取其密码,它不会使用stdin )。
https://unix.stackexchange.com/questions/541633
复制相似问题