ssh 执行 bash 脚本、python curses、setupterm:找不到终端

ssh 执行 bash 脚本、python curses、setupterm:找不到终端

我正在为一个远程系统开发一个 python 应用程序,该系统有一个通过串行端口连接的设备。

目前我的工作流程如下

  • 本地编写代码
  • 提交到 git
  • git push
  • 切换到持有 ssh 会话的终端窗口
  • git pull
  • 运行 Python 代码

这有点尴尬,我想使用一些脚本来加快速度并提高工作效率

我写了两个脚本,一个用于本地,一个用于远程

我的本地脚本如下所示

#!/bin/bash

# do git commit
if [ "$#" -eq 3 ]
then
    if [ "$1" == "-m" ]
    then
        git commit -am "$2"
    else
        echo "syntax error, -m expected as argument 1"
        exit
    fi
else
    git commit -am "execute.sh script"
fi

# do git push
git push

# login to ssh and execute script
ssh <user>@<ip> 'bash -s' < remote-execute.sh

我的remote-execute.sh样子

#!/bin/bash

# cd
cd <dir>

# do git pull
git pull

# run python
python3 main.py

我的 Python 代码使用 Python Curses (ncurses) 进行 GUI 交互

当我运行这些脚本时,我遇到错误

Traceback (most recent call last):
  File "Monitor.py", line 1140, in <module>
    curses.wrapper(main)
  File "/usr/lib/python3.5/curses/__init__.py", line 73, in wrapper
    stdscr = initscr()
  File "/usr/lib/python3.5/curses/__init__.py", line 30, in initscr
    fd=_sys.__stdout__.fileno())
_curses.error: setupterm: could not find terminal

这一定是因为我使用带有“-s”开关的 ssh 来执行远程脚本。

有办法解决这个问题吗?好像有些终端内容没有被正确转发?我不能再多说什么了,因为这有点超出我的知识范围。

答案1

-tssh 客户端在“批处理”模式下运行时不会分配终端(使用提供的命令)。如果您要求它运行交互式应用程序,则需要使用该选项来启用此功能。

此外,在尝试运行交互式程序时,重定向标准输入毫无意义——尽管你可以力量tty 分配(使用 -tt),您的程序只会尝试从 .sh 文件而不是键盘读取输入。

ssh -t <user>@<ip> "cd <dir> && git pull --ff-only && python3 main.py"

ssh -t <user>@<ip> "$(cat remote-commands.txt)"

相关内容