OpenSUSE 15.5下dsh/pdsh执行时tput环境变量报错求助
解决dsh/pdsh执行时tput的TERM环境变量错误
问题现象
执行dsh -v -m remote_host "hostname --fqdn"时,远程主机反复返回tput: No value for $TERM and no -T specified错误,即使已在.bashrc配置PDSH_SSH_ARGS_APPEND、tty判断的tput设置,且在/etc/profile设置export TERM=xterm仍未解决。
解决方法
1. 命令行显式传递TERM变量
执行命令时直接指定远程会话的TERM变量,跳过配置文件的初始化问题:
dsh -v -m remote_host "export TERM=xterm; hostname --fqdn"
如果用pdsh,可简化为:
pdsh -R ssh -v -w remote_host 'TERM=xterm hostname --fqdn'
2. 配置pdsh全局传递TERM
编辑/etc/pdsh/pdsh.conf(无则创建),添加:
PDSH_SSH_ARGS_APPEND="-o SendEnv=TERM"
确保本地终端已正确设置TERM(如echo $TERM返回xterm或类似有效值),重启终端后,pdsh会自动将本地TERM变量传递给远程主机。
3. 限制远程主机的tput执行场景
远程主机的.bashrc或.profile中,仅在交互式且存在tty的会话中执行tput相关代码,避免非交互式会话触发报错:
if [[ $- == *i* ]] && [[ -t 0 ]]; then # 这里放你的tput颜色设置代码 tput setaf 1 # ...其他tput操作 fi
dsh/pdsh默认用非交互式ssh连接,不会触发完整的交互式shell初始化,通过这个判断可以跳过tput命令的执行。
4. 配置ssh自动传递TERM
本地编辑~/.ssh/config,添加目标主机的专属配置:
Host remote_host SendEnv TERM
这样所有针对该主机的ssh连接(包括dsh/pdsh发起的)都会自动传递本地TERM变量。
内容的提问来源于stack exchange,提问作者MB001
相关产品推荐
相关产品推荐

