关于 openeuler 22.03-LTS-SP4 scp 失败问题的记录
背景
- 使用 openeuler 22.03-LTS-SP4 发行版 scp 文件到远程机器不报错,但是远程机器接收不到文件
- 使用 openeuler 22.03-LTS-SP4 发行版从远程机器 scp 文件到本地,报错
protocol error: unexpected <newline>
原因
openeuler 22.03-LTS-SP4 发行版在登录的时候会显示系统的一些相关信息,这个脚本是
/etc/profile.d/system-info.sh
,因为这里面的 echo 输出的信息影响了 scp
解决
方法一
最简单粗暴的方法就是不要这个登入信息了
mv /etc/profile.d/system-info.sh{,.bak}
方法二
还是希望这个登入信息存在,甚至自己还 diy 了,那可以修改机器的
.bashrc
文件,增加下面的内容
[[ $- != *i* ]] && return
- 以下信息来自 ChatGPT
$-
是一个特殊的 shell 变量,表示当前 shell 的标志位。它包含当前 shell 的状态信息,表明 shell 是以何种模式运行的。
i
:表示交互式 shell。s
:表明 shell 是通过脚本启动的。h
:启用命令历史功能(history)。m
:启用作业控制功能(job control)。B
:启用花括号扩展(brace expansion)。H
:启用哈希表缓存命令路径(hashall)。- 在非交互式的 shell(例如通过
scp
、ssh
执行命令时),$-
中不会包含i
,而在你直接打开终端时,$-
中通常会包含i
。- 通过
echo $-
可以在终端中看到himBHs
- 因为交互式 shell 的
$-
中会包含i
,所以,上面的内容就是判断当前 shell 是否是非交互式
的,如果是非交互式的,就会不执行.bashrc
文件的内容(前提是这段内容写在.bashrc
的最前面,或者说,带有 echo 命令的前面)