繁体   English   中英

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

[英]Why does this command kill my shell?

更新:这是一个更通用的命令,更具可重现性。 ShellFish发现存在更普遍的模式:

non-existingcommand & existingcommand &

例如,

xyz & echo &

此外,我有一个同事尝试ssh连接,并在运行命令后关闭了他的连接。 所以这似乎并不局限于某个终端仿真器。

原始问题

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

行为:

执行命令后,我当前的Gnome终端选项卡会在没有警告的情况下关闭。

背景:

我们用curl命令测试了一个URL,但忘了引用它或者转义特殊字符(因此是&符号和等号)。 期待一些关于语法问题或未找到的命令的废话,我们反而只看到我们的shell退出了。 我们花了一些时间将命令缩小到导致行为的最小值。

我们在Ubuntu 14.10上使用Gnome Terminal。 奇怪的是,即使我从会话中分离出来,我在运行byobu的另一个盒子上也没有这种行为。 它也不会发生在Cygwin上。 不幸的是,我仅限于使用Ubuntu 14.10进行测试。

注意:以下命令也会终止我的终端,但只有大约一半的时间

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

附加测试:

有人推荐使用子壳...

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上安装了package command-not-found ,它提供了python脚本/usr/lib/command-not-found 该脚本负责退出shell。

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

从我的/etc/bash.bashrc

function command_not_found_handle {
     #check because c-n-f 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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM