我如何要求 screen 表现得像一个标准的 bash shell?

tho*_*mad 42 bash gnu-screen xterm

刚刚了解了 linux 上的 screen 命令 - 它是天才。我喜欢它。但是,屏幕中的实际终端/提示的外观和行为与我的标准 bash 提示不同。也就是说,颜色不一样,选项卡完成似乎不起作用等。

有没有一种方法可以让 screen 表现得像一个正常的(至少,像我习惯的那样正常)bash 提示?

附加信息

我通过 ssh 从 Mac(终端)连接到无头 linux 机器(Ubuntu)。登录后,我有TERM=xterm-color,当我运行 screen 我有TERM=screen

我将尝试下面的建议,看看我是否可以先更改该$TERM值。

小智 43

感谢这篇文章,我所做的是添加一行~/.screenrc

# ~/.screenrc
defshell -bash      # dash makes it a login shell
Run Code Online (Sandbox Code Playgroud)

然后你的~/.bashrc,/etc/bashrc等中的东西应该运行。


sta*_*san 14

屏幕将术语类型更改为screen。您可以执行以下两项操作之一:

  1. 更改您的术语设置 .screenrc
  2. 修改您的.bashrc文件查找TERM=screen以及TERM=xterm

  • 谢谢!我创建了一个`$HOME/.screenrc` 文件,并将这一行添加到顶部:`term xterm-color` 和哇啦!颜色提示和 `$TERM` 值匹配。但是,没有制表符完成... (4认同)

Kyl*_*yle 12

我喜欢你写问题的方式,我问自己同样的事情,花了一点时间才弄明白。幸运的是,我已经对 shell 调用有所了解,所以我认为问题出在某个地方。

这是我的发现。首先,我个人觉得登录 shell 和非登录 shell 之间的区别很有趣并且值得了解。执行 aman $SHELL并搜索有关 INVOCATION 的部分以阅读有关它的更多信息。

您可以通过shopt login_shell在提示上发出 a 来询问当前的 shell 实例是登录 shell 还是非登录 shell 。请注意,这通常是只读选项。

在我的 Debian 系统上,screen一直默认使用非登录 shell。

在网上搜索和阅读之后man $SHELL,我测试了一些东西,以下两种方法对我有用。在~/.screenrc添加/更新一行如下:

shell -$SHELL
Run Code Online (Sandbox Code Playgroud)

如果这不起作用并且您正在使用bash,您也可以尝试,正如Seamus所分享的:

defshell -bash
Run Code Online (Sandbox Code Playgroud)

如前所述,您可以通过shopt login_shell在提示符下发出命令来测试您当前的 shell 实例是否是登录 shell 。


Den*_*son 9

根据您习惯运行 Bash 的方式,您可能正在运行登录 shell。当您运行 时screen,您正在运行一个非登录交互式 shell。

不同之处在于运行的启动脚本。

  • /etc/bash.bashrc然后~/.bashrc在启动非登录交互式 shell 时获取

  • /etc/profile然后第一个找到的~/.bash_profile, ~/.bash_login, 和~/.profile是在交互式登录 shell 启动时获取的

这可能会影响您。

我也会检查看看是否$TERM不同。


Jav*_*ier 3

screen 不会取代 bash,它会运行 bash 或任何其他 shell。也许它正在运行cshzsh、 或bash但具有不同的参数。

我要尝试的第一件事是检查ps/proc/<pid>/cmdline确保它使用相同的 shell 和相同的参数login

之后,检查文件部分/etc/screenrc提到的任何其他文件man screen