gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:37:14 29 4
gpt4 key购买 nike

更新:这是一个更通用的命令,可重现性更高。 ShellFish 发现有一个更通用的模式:

non-existingcommand & existingcommand &

例如,

xyz & echo &

另外,我让一位同事尝试使用 ssh 连接,但他的连接在运行命令后关闭。所以这似乎并不局限于某个终端模拟器。

原始问题:

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

行为:

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

背景:

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

我们在 Ubuntu 14.10 上使用 Gnome 终端。奇怪的是,即使我从 session 中分离,我运行 byobu 的另一个盒子上也不存在这种行为。它也不会发生在 Cygwin 上。不幸的是,否则我仅限于使用 Ubuntu 14.10 进行测试。

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

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

附加测试:

有人推荐使用 subshel​​l...

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 的调用时,问题不再重现。

来 self 的 /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 - 为什么这个命令会杀死我的 shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074910/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com