为什么在本地运行良好的命令链不能在 SSH 上运行?

为什么在本地运行良好的命令链不能在 SSH 上运行?

在 ssh 上运行时,tail -f 和 grep -o 组合会出现一些奇怪的情况。

因此在本地服务器上,如果你这样做

tail -f /path/myfile.log |grep -o keyword

它可以很好地进行 grep。但如果您在远程服务器上运行它……

ssh user@server 'tail -f /path/myfile.log |grep -o keyword'

不起作用。什么都没有返回,就好像它被重定向到 /dev/null 一样!

但是如果你从 tail 中删除 -f 或从 grep 中删除 -o,就可以正常工作......很奇怪 :-/

当然,我可以在远程服务器上创建一个脚本并运行该脚本!但这不太适合我的情况。

答案1

显然,如果没有终端,SSH 就不会进行行缓冲。

ssh -t 确保伪终端已创建,因此使用行缓冲的程序可以工作。这还可以确保执行您的登录配置文件,以便您也能为用户设置正确的环境。此外,只有使用 -t 标志时,基于屏幕的命令(如 vim)才有效。

顺便说一下,这个博客有一些很好的建议 http://lugatgt.org/2009/10/28/ssh-tips-and-tricks-2/

相关内容