首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程SSH Gnu/Linux服务器无法识别我的管道

远程SSH Gnu/Linux服务器无法识别我的管道
EN

Unix & Linux用户
提问于 2019-09-13 19:18:37
回答 1查看 108关注 0票数 0

基本上,我试图运行以下命令:

代码语言:javascript
复制
sshpass -p "xxx" ssh root@x.x.x.x "tail -f /tmp/messages | grep ptp4l" | cat -n > output.txt

我试图让tmp/消息不断地写入本地文件,这样我们的一些技术人员就可以不断地监视来自其主服务器的IEEE 1588v2偏移,而不必了解他们正在访问的Gnu/Linux服务器的任何信息。

当我运行这个命令时,我根本没有输出到我的文件。

当我手动运行命令时:

代码语言:javascript
复制
tail -f /tmp/messages | grep ptp4l

一切都很好,我一点问题也没有。我得到了我想要的输出。

我有遗漏什么吗?你不能通过引用的命令发送管道吗?

谢谢,斯蒂芬

EN

回答 1

Unix & Linux用户

发布于 2019-09-13 23:16:35

这是经典的“写到管道是完全缓冲”的问题。

尝试强迫您的ssh在远程计算机上使用-tt分配一个伪tty,或者使用--line-buffered选项到grep,如果它接受该选项。

代码语言:javascript
复制
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 )。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/541633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档