“ bash_script.sh”调用“ other_bash_script.sh”并通过SSH在远程服务器上运行时,收到“未设置TERM环境变量”错误。
TERM environment variable not set
我检查了本地和远程服务器上是否设置了TERM变量:
set | grep TERM
TERM=xterm-256color
我在两个脚本的“ Shebang”行的末尾都使用了-p标志,但是由于无法解析,因此我将其删除。
我也做了
export TERM=xterm
bash_script.sh的第二行没有变化,并且在“ other_bash_script.sh”中执行了相同的操作,导致了不同的错误:
top: failed tty get
我删除了该行,因为它无法解决任何问题
我从这两个流行的stackoverflow答案中使用了建议,但没有帮助;
TERM environment variable not set
how to remove "TERM environment variable not set"
这是'bash_script.sh'的内容
ssh -T user@lab < other_bash_script.sh
“ other_bash_script.sh”的输出已成功打印到屏幕上,但是无论哪种情况,我仍然得到: '''未设置TERM环境变量'''
答案 0 :(得分:1)
对于 Nagios XI 用户...
在我将“clear”命令添加到我作为 Nagios 插件创建的 bash 脚本后,我得到了未设置的 TERM 环境变量。我只在 Nagios XI Web UI 中看到了错误。在 Linux 命令行上运行,我没有收到错误消息。删除“清除”消除了错误。
史蒂夫
答案 1 :(得分:0)
您为什么要使用ssh -T
?这将禁用pty的分配。如果您尝试运行top
之类的命令,则会导致它们失败,因为不会出现pty / tty。非交互式ssh会话也不会将TERM
传递给远程系统,这就是为什么您会收到“未设置TERM环境变量”错误的原因。您还声称已确认在远程系统上设置了TERM
,但仅向我们表明已确认在本地系统上设置了ssh -t
。
解决方案是执行Array.push
来强制分配pty,即使对于非交互式ssh会话也是如此。
答案 2 :(得分:0)
将 stderr 重定向到 / dev / null /
2>/dev/null
例如
ssh -T user @ lab
如果脚本不是交互式的,则不需要终端。如果脚本正确退出,则错误不需要得到修复或抑制,但是将stderr重定向到/ dev / null即可。
使用SSH -t选项强制终端可能不起作用。除了原始错误外,我还得到:
因为stdin不是终端,所以不会分配伪终端
使用SSH -t -t(Multiple -t)强制终端删除了错误情况,因此,该错误消息却导致终端垃圾。
非常感谢Kurtis Rader,他的回答Why are you using ssh -T? ...不适用于我,但促使我继续寻找解决方案,并提供了有关使用以下信息的进一步信息:
-T,-t和多个-t标志
在以下StackOverflow帖子Pseudo-terminal will not be allocated because stdin is not a terminal中,以及在serverfault.com帖子What is the benefit of not allocating a terminal in ssh?
中