为什么这个命令杀死我的shell?

更新:这是一个更一般的命令,更具有可重复性。 ShellFish认定有一个更一般的模式:

non-existingcommand & existingcommand & 

例如,

 xyz & echo & 

另外,我有一个同事尝试通过SSH连接,并在运行命令后closures连接。 所以这似乎并不局限于某个terminal模拟器。

原始问题

 echo?a=1&b=2|3&c=4= 

行为:

执行该命令后,我的当前Gnometerminal选项卡closures,没有任何警告。

背景:

我们正在使用curl命令testing一个URL,但忘记引用它或者转义特殊字符(因此和号和等号)。 期待一些关于语法问题或没有find的命令的废话,我们反而看着我们的shell简单地退出。 我们花了一些时间把命令缩小到可以导致行为的最低限度。

我们在Ubuntu 14.10上使用Gnome Terminal。 奇怪的是,即使我脱离了会议,我的另一个箱子上也没有出现这种行为。 Cygwin也不会发生这种情况。 不幸的是,我仅限于使用Ubuntu 14.10进行testing。

注意:下面的命令也杀死我的terminal,但只有大约一半的时间

 echo?a=1&b=2&c=3= 

其他testing:

有人build议使用子shell …

 guest-cvow8T@chortles:~$ bash -c 'echo?a=1&b=2|4&c=3=' bash: echo?a=1: command not found guest-cvow8T@chortles:~$ bash: 4: command not found 

没有出口。

我可以在Ubuntu VM中重现此问题,但不能在OEL VM上重现。 不同的是,在Ubuntu上安装了command-not-found命名的软件包,并提供了python脚本/usr/lib/command-not-found 。 这个脚本负责退出shell。

/etc/bash.bashrc ,有一个函数command-not-found_handle ,它执行/usr/lib/command-not-found 。 因此,当我们尝试执行这样的命令时,terminal退出。 当我注释到/usr/lib/command-not-found的调用时,问题不再可重现。

从我的/etc/bash.bashrc

 function command_not_found_handle { #check because cnf could've been removed in meantime if [ -x /usr/lib/command-not-found ]; then /usr/bin/python /usr/lib/command-not-found -- "$1" return $? elif [ -x /usr/share/command-not-founf/command-not-found ]; then /usr/bin/python /usr/share/command-not-founf/command-not-found -- "$1" return $? else printf "%s:command not found\n" "$1" return 127 fi }