Screen - 继承当前窗口的环境

Screen - 继承当前窗口的环境

在GNU Screen中,如何创建一个新窗口,其shell继承当前窗口中shell的环境?

通常的Ctrl+A C似乎没有这样做。

答案1

如果您在一个屏幕上设置了环境变量(例如运行 bash),然后打开一个新屏幕,则它是一个单独的 bash 进程,因此不会在单独的已运行的 bash shell 上获取环境。解决该问题的快速解决方案是:

env TERMCAP= env | sed -r 's/^(\w+)=(.*)$/\1="\2"/' > env.sh

然后一旦你必须Ctrlac得到一个新的外壳你就可以

source env.sh

我之所以使用它是env TERMCAP= env因为 TERMCAP 环境变量是多行的,并且使事情变得sed更加复杂。它不漂亮,但它有效:)

您可能想要更改它以执行以下操作:

env TERMCAP= env | sed -r 's/^(\w+)=(.*)$/export \1="\2"/' > env.sh

所以变量也被导出。

答案2

导出的变量,如 所示,env应该自动被您的新screen.

但是,在启动之前在 shell 中定义screen但尚未导出的局部变量将不会存在于 screen 会话中。

根据您命名变量的方式,您可以在 Bash 中使用类似的内容来获取可读列表:

(set -o posix ; set) | egrep -v '^(_.*|[A-Z0-9_]+)='

set其本身也会列出大量功能。

(set -o posix ; set)将仅列出变量,但该列表中有大量系统变量。

egrep -v '^(_.*|[A-Z0-9_]+)='过滤掉名称以下划线开头的所有变量,以及所有仅包含大写字母、数字和下划线的变量。这应该消除大多数系统变量。

因此,该列表仅限于也(或仅)使用小写字母(以及下划线和数字)的变量。现在,您可以在启动屏幕之前从该列表中复制所需内容,并将其粘贴到那里。

当然,只有当您有许多忘记导出的变量时,这才有用,但您一定记得在启动屏幕之前检查它们......

相关内容