linux杀死bash,linux - 为什么此命令会杀死我的 shell ? - Ubuntu问答

问题描述

更新:这是一个更通用的命令,可重复性更高。 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=

其他测试:

有人建议使用子 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。因此,当我们尝试执行此类命令时,终端退出。当我注释掉对/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

}

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值