Zac*_*ker 41 linux bash ubuntu
更新:这是一个更通用的命令,更具可重现性.ShellFish发现存在更普遍的模式:
non-existingcommand & existingcommand &
Run Code Online (Sandbox Code Playgroud)
例如,
xyz & echo &
Run Code Online (Sandbox Code Playgroud)
此外,我有一个同事尝试ssh连接,并在运行命令后关闭了他的连接.所以这似乎并不局限于某个终端仿真器.
原始问题:
echo?a=1&b=2|3&c=4=
Run Code Online (Sandbox Code Playgroud)
行为:
执行命令后,我当前的Gnome Terminal选项卡会在没有警告的情况下关闭.
背景:
我们使用curl命令测试了一个URL,但忘了引用它或者转义特殊字符(因此是&符号和等号).期待一些关于语法问题或未找到的命令的废话,我们反而只看到我们的shell退出了.我们花了一些时间将命令缩小到导致行为的最小值.
我们在Ubuntu 14.10上使用Gnome Terminal.奇怪的是,即使我从会话中分离出来,我在运行byobu的另一个盒子上也没有这种行为.它也不会发生在Cygwin上.不幸的是,我仅限于使用Ubuntu 14.10进行测试.
注意:以下命令也会终止我的终端,但只有大约一半的时间:
echo?a=1&b=2&c=3=
Run Code Online (Sandbox Code Playgroud)
附加测试:
有人推荐使用子壳...
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
Run Code Online (Sandbox Code Playgroud)
没有出口.
Shu*_*ngi 26
我可以在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.因此,当我们尝试执行这样的命令时终端退出.当我评论这个电话时/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
}
Run Code Online (Sandbox Code Playgroud)