通过ssh运行程序失败,出现“Error opening terminal:unknown”。

当我尝试通过SSH执行一个简单的命令,那么它是成功的。 例如

#] ssh servername "echo abcd" abcd #] 

但是,当我尝试下面的命令时,它失败:

 #] ssh servername ~/htopmem.sh Error opening terminal: unknown. #] 

其中htopmem.sh的内容在下面。 (灵感来自Marwan Alsabbagh关于htop输出到人类可读文件的答案)

 #!/bin/bash echo q | htop | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | ~/aha --black --line-fix | grep Mem | grep -E -o "[0-9]+/[0-9]+" 

如果我手动ssh到服务器并运行htopmem,则执行成功:

 #] ./htopmem.sh 6515/24021 #] 

任何想法如何使“ssh servername〜/ htopmem.sh”命令工作?

谢谢!

一个普通的ssh命令就像没有tty (终端)一样。 使用-t选项强制ssh打开终端。

从手册 :

-t

强制伪tty分配。 这可以用来在远程机器上执行任意基于屏幕的程序,这在实现菜单服务时非常有用。 多个-t选项强制tty分配,即使ssh没有本地tty。

所以这会工作(更好):

 ssh -t servername ~/htopmem.sh