AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 126009
In Process
thornomad
thornomad
Asked: 2010-03-25 14:24:22 +0800 CST2010-03-25 14:24:22 +0800 CST 2010-03-25 14:24:22 +0800 CST

如何让 screen 表现得像标准的 bash shell?

  • 772

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

有没有办法让屏幕表现得像一个正常的(至少,像我习惯的那样正常)bash 提示符?

附加信息

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

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

bash gnu-screen xterm
  • 8 8 个回答
  • 39814 Views

8 个回答

  • Voted
  1. Seamus Abshere
    2012-03-23T14:51:47+08:002012-03-23T14:51:47+08:00

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

    # ~/.screenrc
    defshell -bash      # dash makes it a login shell
    

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

    • 47
  2. staticsan
    2010-03-25T16:01:19+08:002010-03-25T16:01:19+08:00

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

    1. 更改您的术语设置.screenrc
    2. 修改您的.bashrc文件查找TERM=screen以及TERM=xterm
    • 14
  3. Kyle
    2012-03-24T02:38:01+08:002012-03-24T02:38:01+08:00

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

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

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

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

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

    shell -$SHELL
    

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

    defshell -bash
    

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

    • 12
  4. Dennis Williamson
    2010-03-25T15:50:13+08:002010-03-25T15:50:13+08:00

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

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

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

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

    这可能会影响您。

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

    • 9
  5. Javier
    2010-03-25T14:56:16+08:002010-03-25T14:56:16+08:00

    screen 不会取代 bash,它会运行它或任何其他 shell。也许它正在运行csh,zsh或者bash使用不同的参数。

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

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

    • 3
  6. davidsaliba
    2012-09-22T07:18:06+08:002012-09-22T07:18:06+08:00

    我遇到了同样的问题,当我运行屏幕时,我失去了巧妙找到的酷炫 PS1 颜色提示:P。

    问题是我在 ~/.bash_profile 中像这样运行它

    PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
    

    这意味着当 screen 运行 bash_profile 时 PS1 不会被转移。

    修复很简单:将 export 添加到 ~./bash_profile 中的 PS1 语句,如下所示:

    export PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
    

    就像变量在嵌套执行中不会丢失一样。

    • 2
  7. Roy Smith
    2015-03-08T08:57:36+08:002015-03-08T08:57:36+08:00

    只是想添加一些关于“defshell -bash”的内容(经过几个月的摸索,我才发现)。当你这样做时,由 screen 运行的子 shell 将 $SHELL 设置为“bash”,而不是像通常那样设置为“/bin/bash”。如果您随后在屏幕会话中运行“脚本”,您将获得:

    $ script
    Script started, file is typescript
    script: failed to execute bash: No such file or directory
    

    或者至少这就是我的 Ubuntu 14.04 机器上发生的情况。我一直在使用的解决方法是运行$ SHELL=/bin/bash script. 我会想象 $SHELL 设置错误会破坏其他东西,但脚本是我注意到的。

    • 2
  8. AnrDaemon
    2016-03-03T09:58:43+08:002016-03-03T09:58:43+08:00

    .profile在开始任何 shell 初始化之前 ,我在我的中使用此代码段: which screen > /dev/null 2>&1 && { screen -q -ls if [ $? -gt 10 ]; then read -p "$(tput setaf 2)Found a running SCREEN sesion, attach?$(tput sgr0)[Y/n] " y >&2 if [ "${y:-y}" = "y" -o "$y" = "Y" ]; then screen -aDR && logout fi else echo "$(tput setaf 3)No running SCREEN sessions found.$(tput sgr0)" >&2 fi }

    然后,如果没有屏幕会话正在运行,我……好吧,我不会陷入标准的 shell 提示符。还有一个密码提示sudo(因为我有 99% 的时间登录以管理服务器),如果我打算执行一项冗长的任务,我会取消 sudo 登录,在我的用户会话中手动启动屏幕并在那里 sudo。

    这里的关键点是“在任何 shell 初始化之前”,这样当你已经有一个正在运行的屏幕会话时,它已经用语言环境和其他东西初始化了,你不需要再重做一次。

    • 0

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • crontab ifconfig 什么都不输出

  • 使用命令行工具按排序顺序计算重复项

  • 是否有 bash 等效于 ruby​​ 的“一些内容#{foo}”?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve