scp拷贝文件报错

问题现象:

scp拷贝文件时报错,文件传输被取消。报错信息如下:

“tput: No value for $TERM and no -T specified”

image

 问题原因:

前段时间在系统上/etc/profile.d/目录下新增了一个脚本,修改了PS1变量。脚本内容如下:

red=$(tput setaf 1)
green=$(tput setaf 2)
blue=$(tput setaf 4)
reset=$(tput sgr0)
PS1='\[$red\]\u\[$reset\]@\[$green\]\h\[$reset\]:\[$blue\]\w\[$reset\]\$ '

这段代码的本意是对PS1中的内容进行着色,理论上仅需要在交互式shell中生效。但上述写法会导致总是生效。

scp登录时,不需要启动交互式bash,所以环境变量TERM没有被设置。

 

解决方案:

将上述脚本修改如下:

#判断是否是交互式bash,仅在交互式bash下执行
if shopt -q login_shell; thenred=$(tput setaf 1)green=$(tput setaf 2)blue=$(tput setaf 4)reset=$(tput sgr0)PS1='\[$red\]\u\[$reset\]@\[$green\]\h\[$reset\]:\[$blue\]\w\[$reset\]\$ '
fi

再次执行scp命令,拷贝文件成功。

image

 

参考资料:

scp gives the warning "TERM environment variable not set" - Red Hat Customer Portal