关于 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(例如通过 scpssh 执行命令时),$- 中不会包含 i,而在你直接打开终端时,$- 中通常会包含 i
  • 通过 echo $- 可以在终端中看到 himBHs
  • 因为交互式 shell 的 $- 中会包含 i,所以,上面的内容就是判断当前 shell 是否是非交互式的,如果是非交互式的,就会不执行 .bashrc 文件的内容(前提是这段内容写在 .bashrc 的最前面,或者说,带有 echo 命令的前面)
posted @ 2024-09-15 16:57  月巴左耳东  阅读(24)  评论(0编辑  收藏  举报  来源