Bash

如何使用互動式 TERM/TTY 在重新啟動時啟動螢幕

  • May 2, 2020

我有一台機器(通過 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)重新執行啟動腳本時,一切正常。如何讓螢幕在重新啟動時啟動,以便我稍後在這些終端功能正常工作的情況下附加它?

提前致謝。

\w像in這樣的魔術字元沒有被解釋的事實PS1似乎表明由 screen 啟動的 shell 不是bash,而是簡單的類似/bin/sh. 我查看/etc/crontab了我必須手上的一個系統,它有一條線

SHELL=/bin/sh

一開始,但另一個發行版有SHELL=/bin/bash,因此您可能需要在某處明確設置它以確保獲得一致的結果。

引用自:https://unix.stackexchange.com/questions/583832