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

Yuv*_*mon 9 linux ssh bash parsing pipe

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

#] ssh servername "echo abcd"
abcd
#] 
Run Code Online (Sandbox Code Playgroud)

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

#] ssh servername  ~/htopmem.sh
Error opening terminal: unknown.
#] 
Run Code Online (Sandbox Code Playgroud)

其中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]+"
Run Code Online (Sandbox Code Playgroud)

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

#] ./htopmem.sh
6515/24021
#] 
Run Code Online (Sandbox Code Playgroud)

关于如何使"ssh servername~/htopmem.sh"命令工作的任何想法?

谢谢!

Tho*_*key 11

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

从手册:

-t

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

所以这会工作(更好):

ssh -t servername  ~/htopmem.sh
Run Code Online (Sandbox Code Playgroud)