【发布时间】:2015-09-13 12:14:09
【问题描述】:
更新:这是一个更通用的命令,可重现性更高。 ShellFish 发现有一个更通用的模式:
non-existingcommand & existingcommand &
例如,
xyz & echo &
另外,我让一位同事尝试使用 ssh 连接,但他的连接在运行命令后关闭。所以这似乎并不局限于某个终端模拟器。
原始问题:
echo?a=1&b=2|3&c=4=
行为:
执行命令后,我当前的 Gnome 终端选项卡会在没有警告的情况下关闭。
背景:
我们正在使用 curl 命令测试 URL,但忘记引用它或转义特殊字符(因此是 & 和等号)。期待一些关于语法问题或找不到命令的废话,我们反而看着我们的 shell 简单地退出。我们花了一些时间将命令范围缩小到会导致该行为的最低限度。
我们在 Ubuntu 14.10 上使用 Gnome 终端。奇怪的是,即使我从会话中分离,我运行 byobu 的另一个盒子上也不存在这种行为。它也不会发生在 Cygwin 上。不幸的是,否则我仅限于使用 Ubuntu 14.10 进行测试。
注意:以下命令也会杀死我的终端,但只有一半时间:
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
没有出口。
【问题讨论】:
-
如果你在子 shell(即
bash -c 'echo?a=1&b=2|3&c=4=')中运行它,它会退出吗?它退出时是否打印任何消息?您在 gnome-terminal 中使用什么外壳(echo $SHELL输出什么?)?set +o | grep errexit输出什么? -
请注意,
echo?a=1&b=2|3&也会杀死终端,它比第一个短。 -
@Close voter,这不是关于shell 本身,而是关于分析潜在的解析器故障(或更糟)。因此,我相信提问者在这里会得到比超级用户更好的答案。
-
一般行为是这样的:
non-existing command & any command &。由这种结构组成的命令总是会杀死终端。 -
@ShellFish 我可以使用
123 & ls &重现它 - 我无法重现问题中的示例。也许我们应该换个问题?