Update:这是一个更通用的命令,更容易复制.贝类发现有一种更普遍的模式:

non-existingcommand & existingcommand &

例如

xyz & echo &

此外,我让一位同事try 通过ssh连接,但在运行命令后,他的连接被关闭.所以这似乎并不局限于某个终端模拟器.

Original question:

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

行为:

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

背景:

我们用curl命令测试一个URL,但忘记了引用它或转义特殊字符(因此使用了符号和等号).我们期待着一些关于语法问题或未找到命令的废话,相反,我们看着shell简单地退出.我们花了一些时间将命令的范围缩小到导致该行为的最小值.

我们正在Ubuntu 14.10上使用Gnome终端.奇怪的是,即使我从会话中分离,我在运行byobu的另一个盒子上也不存在这种行为.这在Cygwin身上也不会发生.不幸的是,我只能用Ubuntu 14.10进行测试.

注意:下面的命令也会杀死我的终端,但会杀死only about half of the time个:

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

其他测试:

有人建议使用subshell...

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虚拟机上重现这个问题,但不能在OEL虚拟机上重现.不同的是,在Ubuntu上安装了包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的电话发表 comments 时,这个问题已经无法重现.

从我的/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
}

Linux相关问答推荐

Microsoft ODBC Driver 18 for Python Docker Image,ARM设备;生成错误

为什么我的Linuxshell 程序有时找不到它刚刚创建的文件?

在 bash 中使用 tee 时如何返回错误代码

使用sed命令将记录中的字符串替换为DD-MMM-YYYY日期格式

仅查找并保留有效邮箱并删除无效记录,AWK

如何将一个变量的 2 行添加到另一个变量的特定行?

递归/详尽地将点插入字符串

为什么`__vfprintf_internal`(`stdio.h`中的`printfn`)强制`$rbp`在我的x86-64机器上向前跳转6313864字节?

从 bash shell 等效项在fish shell 上设置 $ANDROID_SDK_ROOT

如何使用awk或其他方法提取双引号中的子字符串?

`std::cout` 是如何实现的?

Linux 如何将主机文件作为用户的输入并将其调用到脚本中

如何将通配符参数传递给 bash 文件

Linux命令行如何接受没有pin的蓝牙设备配对

隐藏文件 .env 未使用 Docker COPY 复制

XML 编辑/查看软件

C.UTF-8 和 en_US.UTF-8 语言环境有什么区别?

如何从命令行打开 Ubuntu Linux 上的 AVD 管理器?

如何使用 Ansible 等待服务器重启?

判断环境变量是否已经设置