如何使用交互式 TERM/TTY 在重新启动时启动屏幕

如何使用交互式 TERM/TTY 在重新启动时启动屏幕

我有一台机器(通过 cron)配置为在重新启动时启动屏幕会话。该会话将打开几个屏幕并在其中一个屏幕中启动服务器。所有这些都运行良好。但是,当我登录并恢复屏幕会话时,我收到如下 (PS1) 提示:

\u@\h [\j] \w\$ 

终端颜色也不会出现。这是PS1我在 bashrc 文件中显式设置的字符串,但\ushell 不会解释类似的控制序列。我已确保在屏幕启动之前导入我的 bashrc 和配置文件;从 cron 调用的脚本:

#! /bin/bash
# This script initializes screen with a propert environment. It is intended to
# be run from cron.

# source the profile
if [ -r "$HOME/.profile" ]; then source "$HOME/.profile"; fi
if [ -r "$HOME/.bash_profile" ]; then source "$HOME/.bash_profile"; fi
if [ -r "$HOME/.bashrc" ]; then source "$HOME/.bashrc"; fi

exec screen -dmS initscreen

我尝试添加行“ export TERM=screen.xterm-256color”和变体(例如,export TERM=xterm-256color),但这些没有改变。

我的假设是,由于屏幕在重新启动时启动时没有真正的 TTY,因此屏幕无法正确解释我的终端,并最终在没有任何终端解释的情况下启动。当我退出屏幕并从 ssh 会话(而不是重新启动时从 cron )重新运行启动脚本时,一切正常。如何让屏幕在重新启动时启动,以便我稍后在这些终端功能正常工作的情况下附加它?

提前致谢。

答案1

\w像in这样的魔术字符没有被解释的事实PS1似乎表明,由 screen 启动的 shell 不是这样bash,而是像/bin/sh.我查看了/etc/crontab我必须手上的一个系统,它有一条线

SHELL=/bin/sh

一开始,但另一个发行版有SHELL=/bin/bash,因此您可能需要在某处显式设置它以确保获得一致的结果。

相关内容