由于 .bashrc 中设置的登录问候语,来自远程主机的 scp 失败

amp*_*ent 3 prompt scp bashrc

scp来自远程主机的简单文件(实际上是本地运行的虚拟机,但这无关紧要)失败,没有显示任何错误消息,但显然没有复制所需的文件:

scp myuser@myhost:~/.bashrc ~/.bashrc.ubuntu

它唯一显示的是

================================================================================

我认为这很奇怪,因为这是我在遥控器上的登录问候语中显示的第一行,如下所示:

================================================================================
Welcome to <Ubuntu 12.04.2 LTS>
You are <myuser> logged into <hostname> (my_ipaddress)
Today is <Wed Aug 28 16:48:49 EDT 2013>
================================================================================
Run Code Online (Sandbox Code Playgroud)

以下.bashrc是定义该问候语的遥控器上的内容:

1 if [ -f ~/.bash_aliases ]; then
2     . ~/.bash_aliases
3 fi
4 
5 
6 export PS1='\w@\t>'
7 
8 set -o vi
9 
10 printf %80s |tr " " "="
11 echo
12 
13 echo "Welcome to <"`lsb_release -d | sed 's/Description\:\s*//'`">"
14 
15 export IPADDR=`hostname -I`
16 
17 echo "You are <"$LOGNAME"> logged into <"$HOSTNAME"> ("$IPADDR")"
18 
19 echo "Today is <"`date`">"
20 
21 
22 printf %80s |tr " " "="
23 echo
Run Code Online (Sandbox Code Playgroud)

一旦我从远程 .bashrc 上的 9 中删除了所有内容,scp 就成功了。

谁能解释一下这个奇特的事件?本地主机是Mac OS Mountain Lion,远程(VM)是Ubuntu 12.04.

amp*_*ent 5

此线程的帮助下,我认为问候语中的特殊字符是问题所在,.bashrc除非我们处于交互模式,否则应该返回。所以我在遥控器上的 .bashrc 的开头添加了以下内容:

# If not running interactively, don't do anything
if [[ $- != *i* ]]; then return; fi
Run Code Online (Sandbox Code Playgroud)

这解决了问题,我能够使用 scp