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。您可以执行以下两项操作之一:
.screenrc.bashrc文件查找TERM=screen以及TERM=xtermKyl*_*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 。
根据您习惯运行 Bash 的方式,您可能正在运行登录 shell。当您运行 时screen,您正在运行一个非登录交互式 shell。
不同之处在于运行的启动脚本。
/etc/bash.bashrc然后~/.bashrc在启动非登录交互式 shell 时获取
/etc/profile然后第一个找到的~/.bash_profile, ~/.bash_login, 和~/.profile是在交互式登录 shell 启动时获取的
这可能会影响您。
我也会检查看看是否$TERM不同。
screen 不会取代 bash,它会运行 bash 或任何其他 shell。也许它正在运行csh、zsh、 或bash但具有不同的参数。
我要尝试的第一件事是检查ps并/proc/<pid>/cmdline确保它使用相同的 shell 和相同的参数login。
之后,检查文件部分/etc/screenrc提到的任何其他文件man screen。