有时无法运行 /bin/bash...?

有时无法运行 /bin/bash...?

我正在使用运行 Debian Wheezy 7.4 的 Google Compute Engine。

最近我注意到一些奇怪的事情。例如,我可以执行sudo bash。但是,从 root 角度,我无法执行sudo -u anotherUser bashsu -l anotheruser -c bash

而且,更重要的是,我无法启动 GNU screen 的新实例。如果我尝试启动新实例,它会立即关闭,并且我会收到消息[screen is terminating]。在正在运行的实例中,我无法启动更多窗口。

然后我发现了它们的共同点:bash

我可以做screen zshscreen sh

我可以先做sudo bash然后sudo -u anotheruser zshsu -l anotheruser -s zsh但不能su -l anotheruser -c zsh

请注意我使用 bash 登录,然后我可以sudo bash。但是我不能将 bash 用于 root 用户sudosu从 root 用户转换为其他用户,也不能将 bash 用于screenshell。

我重启了。是的,这让我很担心,我实际上重启了服务器。

我不知道是什么原因造成的,我有点担心。

我的 bash 配置文件(据我所知它们与默认配置文件相比没有变化):

bash 补全在主(登录)shell 上起作用。

以下是 Glenn Jackman 要求提供的信息:

$ md5sum /bin/bash /usr/bin/bash
144968564a6b1159ed82059920cea76f  /bin/bash
md5sum: /usr/bin/bash: No such file or directory
$ getent passwd anotheruser
anotheruser:x:1004:1004::/home/anotheruser:/bin/bash

我还想到了另一个测试。这个有效:

$ echo $(bash -c 'echo Hello, World!')

这是怎么回事?

答案1

存在问题:

/usr/share/bash-completion/bash_completion

更具体地说,它是开头的那一行:

if [ "$0" != "-bash" ]; then exit; fi

该行检查当前 shell 是否为 bash。如果不是,则不使用 bash 补全。如果我删除该行,则尝试使用该[[命令的某些脚本会出错。

这是我最终想到的办法:

isbash=no
case "$SHELL" in
  *bash*) isbash=yes ;;
esac
case "$0" in
  *bash*) isbash=yes ;;
esac
if [ "$isbash" = "no" ]; then exit; fi

相关内容