通过ssh运行程序失败,出现“错误打开终端:未知”。

时间:2015-05-26 22:11:28

标签: linux bash parsing ssh pipe

当我尝试通过ssh执行一个简单的命令时,它就成功了。 e.g。

#] ssh servername "echo abcd"
abcd
#] 

但是,当我尝试以下命令时,它会失败:

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

其中htopmem.sh的内容如下。 (受到Marwan Alsabbagh在htop output to human readable file上的回答的启发)

#!/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”命令工作的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:9)

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

来自manual

  

-t

     

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

所以这会起作用(更好):

ssh -t servername  ~/htopmem.sh