在我的 .bashrc 中放入“screen -r”是个好主意吗?

在我的 .bashrc 中放入“screen -r”是个好主意吗?

我想使用 screen 来保持服务器上的 ssh 会话处于活动状态。如果我可以在登录时自动为我的用户恢复任何正在运行的会话,那就太好了。最直接的方法是将“screen -r”添加到我的 .bashrc 中,这似乎工作正常。我只是想知道这是否会在尚未测试的条件下破坏任何东西。有经验的人可以告诉我这是否是我应该做的吗?

答案1

如果存在会话,则需要screen -R -d自动附加到现有会话,否则需要创建一个会话。

确保你只在交互式 shell 上执行此操作~/.bashrc即使对于非交互式 shell,当其父进程是 rshd 或 sshd 时,Bash 也会提供源代码(文档中提到了这一点,但很容易忽略)。您可以判断 shell 是交互式的,因为$-其中包含i

case $- in
  *i*) screen -Rd;;
esac

这将不允许您轻松地在不同的终端中运行不同的屏幕会话。

您需要脱离屏幕,然后退出父级 shell 才能注销。可以使用exec screen而不是 来解决screen

如果您启动除登录 shell 之外的 shell,您将进入屏幕,这在大多数情况下都不是您想要的。我至少会将此限制在您直接在交互式 ssh 会话中运行时,在您的 中输入以下内容~/.bash_profile

case "/$(ps -p $PPID -o comm=)" in
  */sshd) screen -R -d;;
esac

当您使用您的命令执行复杂的事情时一定要小心,.bashrc因为导致 shell 退出的错误会使登录变得困难。


推荐是不修改服务器上的 shell 初始化文件,而是从客户端明确运行 screen,如下所示

ssh -t host.example.com screen -R -d

(您可能会在客户端上创建一个 shell 别名或桌面环境快捷方式。)这样,您可以轻松选择不运行屏幕,指定备用会话名称等等。

答案2

您的 X 服务器启动脚本通常会启动一个新的 shell,例如,如果您使用 gdm 使用“用户定义会话”登录。

我认为任何不退出的东西都可能导致你的 X 启动挂起。其中包括screen -r

相关内容