问题现象:
scp拷贝文件时报错,文件传输被取消。报错信息如下:
问题原因:
前段时间在系统上/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命令,拷贝文件成功。
参考资料:
scp gives the warning "TERM environment variable not set" - Red Hat Customer Portal