在 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/