Debian 上的 Bash 变得疯狂

Debian 上的 Bash 变得疯狂

我有点惊讶,我已经使用 Azure 部署了一个 VM,当我通过 SSH 连接它时,出现了一个奇怪的 bash:

我没有命令行前缀,以前有username@host:~$,现在却是空的。
我也没有完成。当我输入时什么都没有改变bash

以下是我的用户的 /etc/passwd 行:

admusr:x:1000:1000 :: / home / admusr:/ bin / bash

在此处输入图片描述

有什么想法吗?
谢谢

答案1

这通常发生在不是 TTY 时。(我在评论中说错了,这与或stdin无关)。stdoutstderr

SSH 客户端将自动确定其是否stdin是 TTY,然后请求 SSH 服务器为此会话分配或不分配 PTY。

我怀疑您的本地 shell 没有 TTY ,或者您可能正在管道中stdin使用等等...您可能想要修复它而不是覆盖的行为(如下所示)。sshssh

如果你运行tty,输出是“不是 tty“而不是像这样的路径/dev/pts/9,那么这将证实我的怀疑。

在功能齐全的终端上尝试以下操作(替换ssh ${HOST}bash得到类似的结果):

  • ssh ${HOST}-应该为您提供一个标准的远程 shell,带有提示、历史记录等......
    • 因为您的终端的 TTY / PTY 是以ssh的形式提供的stdin
  • cat | ssh ${HOST}-应该给你一个“静音“shell 就像你正在报告的那样
    • 因为cat's stdout(不是 TTY)是作为ssh's提供的stdin

有几个命令行选项可以覆盖此自动行为:

  • ssh -t-要求在服务器上分配 PTY
    • cat | ssh -t ${HOST}仍将导致“静音“shell,你会看到类似这样的消息”不会分配伪终端,因为 stdin 不是终端。
  • ssh -tt-力量在服务器上分配 PTY
    • cat | ssh -tt ${HOST}将导致会话最初看起来像“好的“,但你会发现事情实际上是相当不正常的......man ssh不会填满屏幕,控制字符将会击中 SSH 客户端(或者可能更准确地说cat)而不是远程应用程序,等等......
  • ssh -T-禁用在服务器上分配 PTY
    • ssh -T ${HOST}将导致“静音“ 壳

考虑运行一个可执行的 shell 脚本,其内容如下:

#!/bin/bash

echo "hello"
echo "world"

在这种情况下实际发生的情况是/bin/bash执行,使用提供的文件stdin(不是您的终端)。bash将检测到stdin不是 TTY,并且将抑制某些行为,例如在命令之间打印提示并将命令记录在您的历史记录中。

相关内容